Qt MSVC編譯器中文字符串編譯報錯及亂碼問題


一、使用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后重新編譯執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM