gcc中的-finput-charset和-fexec-charset開關

來源:互聯網
上載者:User

-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位元組寬。)


原文來自 http://hi.baidu.com/xyk34/item/a418d7a1b219b8716cd455fe

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.