可能重複:
How to create a UTF-8 string literal in Visual C++ 2008在Visual Studio 2008中默認情況下是否可以使用UTF-8編碼?
是否有可能迫使Visual Studio中使用UTF-8編碼默認情況下,所有的字符串?
例如已經
wchar_t *txt="hello";
編碼UTF8
可能重複:
How to create a UTF-8 string literal in Visual C++ 2008在Visual Studio 2008中默認情況下是否可以使用UTF-8編碼?
是否有可能迫使Visual Studio中使用UTF-8編碼默認情況下,所有的字符串?
例如已經
wchar_t *txt="hello";
編碼UTF8
此博客文章看起來很有希望:UTF-8 strings and Visual C++
大部分的重要內容仍然存在,即使一些圖片是破碎。總之:
第一步,你必須確保源文件是UTF-8編碼的字節順序標記(BOM)。 BOM是一件非常重要的事情,如果沒有它,C++編譯器將無法正常工作。
在Visual Studio 2008中,可以使用位於文件菜單中的高級保存命令從IDE直接完成此操作。一個對話框將彈出。選擇帶簽名的UTF-8。
如果您編譯並運行測試程序,[您不會獲得預期的結果]。會發生什麼情況是,儘管您的文本使用UTF-8正確編碼,但出於兼容性考慮,C/C++運行時默認情況下設置爲「C」語言環境。該區域假定所有char都是1個字節。呃。親愛的UTF-8並非如此!
您需要使用
setlocale
函數更改語言環境,以使輸入輸出流處理器正確解釋字符串。在我們的例子中,任何系統使用的語言環境都很好,這是通過「」作爲第二個參數完成的。
嚴格來說,您必須檢查setlocale的返回值,如果返回0,則發生錯誤。在多語言應用程序中,您需要更精確地使用setlocale,明確提供您想要使用的語言環境(例如,您可能希望讓應用程序在日語計算機上顯示俄語文本)。
我不知道什麼好辦法,使這個默認值。我很確定這是不可能的。 Windows應用程序強烈更喜歡UTF-16,如果您正在編譯爲Unicode。如果可能的話,你應該轉換爲該格式。
否則,我可以想出的最佳選擇是定義一個簡單的宏(類似於Windows頭文件中定義的_T("string")
),使用上述邏輯轉換爲UTF-8。
我沒有問題,但是,據我所知,在Visual Studio中的UNICODE == UTF16。是否可以強制UTF-8編碼字符串,如L「hello」? – Grim 2011-04-17 11:33:12
@Kostya:你說得對。答案已更新。 – 2011-04-17 11:35:23