一、使用MSVC編譯器編譯時字符串含有中文,編譯報錯
首先明白為什么會報錯:Qt Creator IDE生成的源代碼文件默認采用的編碼是UTF-8(可以使用類似Notepad++這種編輯器打開查看文件編碼),但是MSVC編譯器可以支持源代碼文件的編碼為UTF-8-BOM(即帶BOM格式的),即默認不支持UTF-8。所以解決方案就有2個:一是讓MSVC支持UTF-8,也就是下面方案1;二是將Qt Creator生成的源代碼文件的編碼轉換成UTF-8-BOM即下面的方案2。

解決方案一:修改.pro文件,在.pro文件中添加以下設置,然后qmake重新編譯即可通過
win32-msvc*: {
QMAKE_CFLAGS *= /utf-8
QMAKE_CXXFLAGS *= /utf-8
}


解決方案二:將源代碼文件的編碼轉換成UTF-8-BOM
1.先來查看一下Qt Creator源代碼文件原來的編碼及編譯結果

2.使用Notepad++或其他編輯器將源代碼文件轉成UTF-8-BOM


3.重新qmake后,編譯並運行結果如下:

4.Qt Creator默認編碼設置(菜單欄“工具”-“選項”)

二、中文顯示亂碼問題解決(前提是已解決中文字符編譯報錯問題)
上面的解決中文字符串編譯報錯方案2雖然解決了編譯問題,但是最后還是發現又問題,即中文顯示亂碼。其本質原因還是因為方案2並沒有真正讓msvc編譯器使用UTF-8編碼導致。解決方案同樣有2種:
方案1:將代碼種所有的中文字符串用QStringLiteral宏包裹:

方案2:在含有中文字符串的源代碼文件的第一行(注意是第1行,即文件最開始位置)添加以下MSVC的預編譯指令,讓msvc支持utf-8(Linux下自動忽略)
#if _MSC_VER >=1600
#pragma execution_character_set("utf-8")
#endif
或者直接一句
#pragma execution_character_set("utf-8")

三、最簡單同時解決中文字符編譯報錯、顯示亂碼的方式
即最開始的方案1,在.pro文件加入設置,qmake后重新編譯執行。

