首先,我們需要有的概念是亂碼的問題是由編碼和解碼方式引起的。涉及到編碼方式的地方有3個:
原始碼字符集
執行字符集
執行環境字符集
原始碼字符集(the source character set):原始碼檔案時使用何種編碼格式儲存的。
執行字符集(the execution character):可執行程式內儲存的是何種編碼(程式執行時記憶體中字串編碼)
原始碼字符集確切的說是編譯器認為原始碼檔案的編碼方式,執行字符集是可執行程式採用的編碼方式,而執行環境字符集則是環境支援的編碼方式。編譯程式處理字串的過程,實際上是首先讀入字元的二進位制數,根據編碼格式到另一種編碼格式轉換策略得到另外一串二進位制數,所以1->2可能有二進位制數的變化,而3則是通過既定的編碼方式來解讀2中的二進位制數為字元(這裡為什麼說可能呢,因為1和2如果是相同的編碼是不需要變化的)。
那麼具體是哪些地方引起錯誤呢?在解答之前先介紹理解該問題的先驗知識(由於我的執行環境是window簡體中文版,所以以下的locale編碼就是指gbk編碼):
msvc2013編譯程式時,處理原始碼字符集時,有bom識別符號的則正確識別(實際上目前就是有無bom的utf-8),無bom則使用本地locale字符集(隨系統設定而變),執行字符集預設用本地locale字符集(其他msvc版本在看完本文甚至可以根據自己實驗猜測處理)。
gcc編譯程式時,預設兩者都是uft-8,有finput-charset原始碼字符集和fexec-charset執行字符集則按照設定
qt 文字編輯器裡設定的是原始碼字符集 ubuntu 系統預設為不帶bom的utf-8
在標頭檔案中加入#pragma execution_character_set(「utf-8」) 使得原始碼字符集和執行字符集一致
QT5 解決中文亂碼問題
qt中的中文顯示,經常會出現亂碼。從網上看了一些部落格,大都是qt4中的解決方法,網上搜到的都是這種 include qtextcodec int main int argc,char ar qt5中,取消了qtextcodec setcodecfortr 和qtextcodec setcodecf...
Qt5顯示中文亂碼
公升級到qt5.x之後,原先解決的qt顯示中文亂碼的方法突然不適用了,找了很多方式來解決這個問題 第一種 在公司 裡看到的方法,先將對應的cpp檔案用windows自帶的記事本開啟,另存為utf 8格式,然後在 中,遇到中文字元,使用qstringliteral 中文 進行修飾 這種方式每次新建乙個...
Qt5中文亂碼解決方案
公升級到qt5.x之後,原先解決的qt顯示中文亂碼的方法突然不適用了,找了很多方式來解決這個問題 第一種 在公司 裡看到的方法,先將對應的cpp檔案用windows自帶的記事本開啟,另存為utf 8格式,然後在 中,遇到中文字元,使用qstringliteral 中文 進行修飾 這種方式每次新建乙個...