2011-04-17 38 views

回答

1

此博客文章看起來很有希望:UTF-8 strings and Visual C++

大部分的重要內容仍然存在,即使一些圖片是破碎。總之:

  1. 第一步,你必須確保源文件是UTF-8編碼的字節順序標記(BOM)。 BOM是一件非常重要的事情,如果沒有它,C++編譯器將無法正常工作。

    在Visual Studio 2008中,可以使用位於文件菜單中的高級保存命令從IDE直接完成此操作。一個對話框將彈出。選擇帶簽名的UTF-8。

  2. 如果您編譯並運行測試程序,[您不會獲得預期的結果]。會發生什麼情況是,儘管您的文本使用UTF-8正確編碼,但出於兼容性考慮,C/C++運行時默認情況下設置爲「C」語言環境。該區域假定所有char都是1個字節。呃。親愛的UTF-8並非如此!

    您需要使用setlocale函數更改語言環境,以使輸入輸出流處理器正確解釋字符串。

    在我們的例子中,任何系統使用的語言環境都很好,這是通過「」作爲第二個參數完成的。

  3. 嚴格來說,您必須檢查setlocale的返回值,如果返回0,則發生錯誤。在多語言應用程序中,您需要更精確地使用setlocale,明確提供您想要使用的語言環境(例如,您可能希望讓應用程序在日語計算機上顯示俄語文本)。

我不知道什麼好辦法,使這個默認值。我很確定這是不可能的。 Windows應用程序強烈更喜歡UTF-16,如果您正在編譯爲Unicode。如果可能的話,你應該轉換爲該格式。

否則,我可以想出的最佳選擇是定義一個簡單的宏(類似於Windows頭文件中定義的_T("string")),使用上述邏輯轉換爲UTF-8。

+2

我沒有問題,但是,據我所知,在Visual Studio中的UNICODE == UTF16。是否可以強制UTF-8編碼字符串,如L「hello」? – Grim 2011-04-17 11:33:12

+0

@Kostya:你說得對。答案已更新。 – 2011-04-17 11:35:23

相關問題