問題描述
一般很多編輯器默認都是保存成utf-8文件,然而在輸出中文的時候出現了亂碼?另外試了其他方法,有的亂碼,有的不亂?
MinGW gcc 編譯 utf-8 文件的時候亂碼
MinGW gcc 編譯 gbk 文件的時候正常
MinGW gcc 編譯 utf-8 文件 -fexec-charset=gbk 顯示中文正常
-finput-charset用來指定輸入文件的的字符編碼,如果不指定,將無法將L“中文"這樣的字符正確轉化為寬字符。相反,未指定輸入文件的字符編碼時,MinGW編譯環境下的gcc將按本地字符編碼解析源文件,將普通字符串仍然按照文件使用的本地字符編碼編入程序,並將含有寬字符標量L的字符串按照本地編碼來識別並轉為UTF-8編碼(很奇怪,它不是轉為UNICODE編碼,反而,在指定了源文件的字符集之后卻轉為了UTF-16編碼。同時,這種不指定源文件編碼方式卻使用寬字符標量L指明編譯器要將特定字符串轉換成UNICODE編碼的行為將會帶來一個警告,而不是編譯報錯)。
-fexec-charset指定了字符串所使用的格式。
比如說,如果源文件保存的是GBK格式的,那么編譯成程序時,其中的字符串就是GBK編碼的。但是如果你的程序其實需要字符串按UTF-8來編碼,那么就可以指定編譯選項-fexec-charset=UTF-8 -finput-charset=GBK
另外,windows中常見的UNICODE編碼在這里應該寫成UTF-16。linux中的UNICODE編碼相應的就是UTF32了。
-fwide-exec-charset指定了C\C++中使用寬字符時的格式,默認的就是UTF-16或者UTF32,取決於你的系統中使用的寬字符格式。(正如上面說的,windows使用UTF16的UNICODE編碼,它是UCS2字符集的一個編編碼格式;linux使用UTF32編碼,是UCS4的一個編碼格式。相應的,windows中的編譯器一般將wchar_t定為2個字節寬,而linux中的編譯器一般定義wchar_t為4字節寬。)