说到底,问题的根源在于源代码编码是给编译器看的,可以是任何编码,只要编译器支持的编码就可以,最终生成机器码不存在编码一说。但,源代码中的字符串是实打实会交给控制台或者GUI程序展示,它的编码正确性很重要,一旦不匹配就很可能乱码。所以,源代码中字符串的编码,编译器一般采用贴近本机操作系统的默认编码,Windows当然是ANSI编码,Linux平台一般为UTF-8编码。这就出现和源代码编码不一致的情况了。例如,OS默认是ANSI编码,UTF-8格式源代码,字符串"我"在VC编译依然是GB2312编码CE D2. 假设字符串变量出现在如下demo.c中:
- cl /source-charset:utf-8 demo.c "我"对应: CE D2.
- cl /utf-8 demo.c "我"是UTF-8编码,对应: E6 88 91.
- cl /execution-charset:gb2312 demo.c "我"对应: CE D2.
- cl /execution-charset:utf-8 demo.c "我"是UTF-8编码,对应: E6 88 91.
