gcc編譯器對寬字符的識別


      最早是使用VC++工具來學習C++,學的越多就越對VC擋住的我看不見的東西好奇,總想多接觸一些開發環境,今日抽空摸索了一下CodeBlocks這個開源的IDE使用方法,配置的編譯器是MinGW的gcc編譯器,gcc編譯多字節集的字符還沒什么問題,但遇到寬字符,發現編譯不通過,經過多方查找,發現gcc對寬字符的支持分規則同我用熟了的cl編譯器有一些區別,具體用法如下:

        GNU   C/C++編譯器gcc也可以正確支持wchar_t字符和字符串,但是源代碼的保存格式必須符合下面條件:
        一:源代碼文件的保存編碼必須是UTF-8;
        二:UTF-8編碼格式的源代碼文件,不能有BOM標志頭.
        只有源代碼文件符合上面兩個條件,gcc才會正確支持wchar_t字符和字符串.如果不符合上面兩個條件的話,有可能會編譯出錯,有可能會產生錯誤的wchar_t字符和字符串.
        gcc在Windows平台下,wchar_t是16位類型,在Linux平台下,wchar_t是32位類型.
       
        另外,GCC提供了以下的參數開關來支持其它文字編碼的源文件:
        a)-finput-charset=charset
            gcc在默認情況下,總是假設源代碼的編碼是UTF-8,如果是其它編碼的源代碼文件,源代碼里面又用到了wchar_t的類型,則可以使用-finput-charset=charset這個參數來實現.例如通常使用GBK編碼的源代碼可以假如參數:-finput-charset=GBK
         b)-fwide-exec-charset=charset
            默認情況下,gcc在Windows平台下,寬字符串串常量的每個字符是16位UTF-16類型,在Linux平台下,寬字符串串常量的每個字符是32位UTF-32類型,            使用這個參數,可以改變寬字符串串常量的類型.例如在x86的機器環境,Linux操作系統下,要使例如 L"漢字" 編譯后保存為UTF-16的字符串,則可以使用 -fwide-exec-charset=UTF-16LE

備注:我后來的解決方法過程,是直接用記事本重新打開另存為UTF-8格式,編譯通過,不過這樣感覺好麻煩,我還得再試試其它方法,最后不理會源代碼文件保存格式,只是在編譯選項那里設置-finput-charset=GBK,這樣也是可以的(Windows上的字符編碼貌似總是GBK的).

1 TCHAR szMsgText[ ] = TEXT("大家好!");
2 TCHAR szMsgTitle[ ] = TEXT("提示!");

http://www.cnblogs.com/guobbs/p/3654317.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM