在Windows環境下編譯:
MS C編譯器
MS C編譯器會把源程式轉換為當前內碼表編碼的源程式。
1、如果原始檔是ANSI(當前內碼表936)編碼,直接編譯;
2、如果原始檔是不帶BOM的UTF-8,則編譯的時候需要加-source-charset:UTF-8;
3、如果原始檔是帶BOM的UTF-8、UTF-16LE、UTF-16BE,直接進行編譯。
GCC
GCC編譯器不執行轉換源程式為當前內碼表編碼的源程式,它假定源程式是UTF-8編碼。
1、如果原始檔是ANSI(當前內碼表936)編碼,直接編譯;
2、如果原始檔是ANSI(當前內碼表936)編碼但如果有wprintf列印L””的字串,則需要新增編譯選項-finput-charset=gbk;
3、如果原始檔是UTF-8,無論帶不帶BOM,都能正常編譯,但列印亂碼,需要增加編譯選項-fexec-charset=gbk;
4、如果原始檔是UTF-16,則如果原始檔包含了其它ANSI標頭檔案和庫函式,則無法進行編譯,若不包含其它ANSI標頭檔案和庫函式,則可以透過增加-finput-charset=utf-16le或-finput-charset=utf-16be來編譯原始檔。
wprintf列印帶中文的字串,需要在源程式中wprintf之前新增setlocale(LC_ALL, "");