在Qt Creator 中c++源碼有中文字符,結果不能編譯成功。
代碼
QMessageBox::warning(this, "警告","用戶名密碼錯誤",QMessageBox::Yes);
報錯如下:
-1: warning: C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
error: C2001: newline in constant
解決方法:
首先源碼的保存格式是UTF-8。Qt creator 的菜單里 編輯-Select Encoding,可以選擇編碼。以及工具-選項->文本編輯器->行為->文件編碼里要選擇UTF-8,BOM: 如果是UTF-8則自動添加。
-
給中文字符串加QStringLiteral宏或QString::fromLocal8Bit函數:
QStringLiteral("你好中文!");
不過,在這兩種形式下,你都無法用tr方法來創建翻譯了。 -
另一種方法是宏定義:
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
這個宏告訴MSVC,執行字符集是UTF-8編碼的,別瞎整成GB2312的!還有個好處,就是能用tr包中文,方便日后的翻譯。
ps
之前的報錯,我還發現,如果是偶數個中文就不會報錯,奇數個就會編譯報錯。
同樣適用Qt中文亂碼的問題。
其實主要原因是用MSVC編譯造成的。