QT5 中文亂碼問題

2021-10-05 00:04:24 字數 1218 閱讀 3303

#pragma execution_character_set("utf-8")在類中宣告此預編譯!!!指示char的執行字符集是utf-8編碼。
為什麼會出現亂碼

首先,我們需要有的概念是亂碼的問題是由編碼和解碼方式引起的。涉及到編碼方式的地方有3個:

原始碼字符集

執行字符集

執行環境字符集

原始碼字符集(the source character set):原始碼檔案時使用何種編碼格式儲存的。

執行字符集(the execution character):可執行程式內儲存的是何種編碼(程式執行時記憶體中字串編碼)

gcc 執行字符集設定引數

-finput-charset=charset //設定原始碼字符集為charset

-fexec-charset=charset //設定執行字符集為charset

-fwide-exec-charset=charset //設定寬字串的執行字符集為charset

msvc 執行字符集設定引數

-execution-charset:utf-8 // 指明程式執行時使用utf-8字符集

-source-charset:utf-8 // 指明原始碼檔案的編碼為utf-8字符集

原始碼字符集確切的說是編譯器認為原始碼檔案的編碼方式,執行字符集是可執行程式採用的編碼方式,而執行環境字符集則是環境支援的編碼方式。編譯程式處理字串的過程,實際上是首先讀入字元的二進位制數,根據編碼格式到另一種編碼格式轉換策略得到另外一串二進位制數,所以1->2可能有二進位制數的變化,而3則是通過既定的編碼方式來解讀2中的二進位制數為字元(這裡為什麼說可能呢,因為1和2如果是相同的編碼是不需要變化的)。

那麼亂碼的原因有:

①編譯器解讀原始碼字符集錯誤。如我是utf-8的原始碼,因為不帶bom你當成locale,執行字符集也是locale所以不需要轉換,而本來utf-8到locale是需要轉換的。

②原始碼字符集到執行字符集的轉換錯誤。如本來把識別正確的原始碼字符集locale轉成執行字符集中的utf-8,結果你給我指定了錯誤了轉換方式,說讓我通過***編碼轉utf-8的策略轉(note:這是錯誤的表述,看到下面你就明白,實際上這裡的錯誤只能是應為轉換演算法的錯誤)。

③字元解析錯誤。如果現在程式中的字串二進位制是utf-8的,結果你非要說執行字符集是loacle,那麼解析肯定會出錯。

還需要理解的包括下面的知識:

Qt5中文亂碼問題

標頭檔案加上 include 在類裡面定義變數 qtextcodec codec 在建構函式中初始化變數 codec qtextcodec codecforname gb18030 在每次使用中文的時候直接呼叫 codec tounicode 開啟檔案 對於中文路徑 qstring filename...

QT5中文亂碼問題

突然開啟乙個別人的工程,發現中文總是顯示不出來,qdebug 列印出來也全是?搜尋了一下解決方法,但是總解決不了。方法1 加入 qtextcodec codec qtextcodec codecforname utf 8 但是對我無效。方法2 在標頭檔案申明中加上 pragma execution ...

Qt5 中文亂碼的問題

1 如果你是linux完全不用擔心因為qt5 可以處理 utf8編碼的中文 2 假如你在window平台上使用 使用如果你在windows下,且使用的是mingw,那麼只要你將原始碼檔案儲存成utf8,前面的 將直接可以工作 無須其他設定 3 如果使用的是 msvc2005 2008 2010 20...