原文連線:
qt中規定 qstring 的 const char* 建構函式是呼叫 fromutf8() 構造的。所以要求字串字面量是 utf-8 編碼的位元組。
這裡先要解釋一下下面兩個概念:
原始碼字符集很容易理解,就是我們源**的編碼。為了我們的**能夠跨平台,原始檔要儲存為帶 bom 的 utf-8。
執行字符集就麻煩多了。比如我們下面的**片段:
qstring str("我是中文");
即使這個檔案存為 utf-8 格式了,編譯成 exe 檔案時,編譯器也可能對這個字串常量進行轉碼,轉為別的編碼格式。
在 gcc 中,控制這個轉碼操作的命令列引數是:
-fexec-charset=charset
如果不指定的話預設是 utf-8。所以我們用 gcc 時很少關注這個問題。
viual stdio 中就麻煩多了。這裡先說 visual stdio 2015,這個是我現在用的編譯環境。vs2015 中如果源**是 utf-8的,執行字符集預設是本地 locale 字符集,對於簡體中文的 windows 系統來說,這個 本地locale字符集是 gb18030。所以直接顯示漢字會全是亂碼。解決這個亂碼有三個辦法,第乙個辦法是編譯時加入命令列引數,在 qt 的 pro 檔案中可以這樣:
msvc:qmake_cxxflags += -execution-charset:utf-8
第二個辦法是在原始檔中加入:
#pragma execution_character_set("utf-8")
更好的辦法是源**寫為:
qstring str(u8"我是中文");
當然,這裡要求編譯器支援 c++11,因此上面的**在 vs2005、vs2008 上是無法編譯通過的。
另外,如果源**儲存為不帶 bom 的 utf-8。那需要告訴 vs2015 我們的編碼格式是 utf-8,可以在 pro 檔案中加入如下的**:
msvc:qmake_cxxflags += -source-charset:utf-8
另外再說說 vs2005、vs2008 下該如何設定。首先這兩個編譯器都不支援 c++11,也不支援執行字符集的設定,執行字符集就是預設的本地 locale 字符集。所以我們的**只能寫為:
qstring str = qstring::fromlocal8bit("我是中文");
Qt5中文亂碼問題
標頭檔案加上 include 在類裡面定義變數 qtextcodec codec 在建構函式中初始化變數 codec qtextcodec codecforname gb18030 在每次使用中文的時候直接呼叫 codec tounicode 開啟檔案 對於中文路徑 qstring filename...
QT5 中文亂碼問題
pragma execution character set utf 8 在類中宣告此預編譯!指示char的執行字符集是utf 8編碼。為什麼會出現亂碼 首先,我們需要有的概念是亂碼的問題是由編碼和解碼方式引起的。涉及到編碼方式的地方有3個 原始碼字符集 執行字符集 執行環境字符集 原始碼字符集 t...
QT5中文亂碼問題
突然開啟乙個別人的工程,發現中文總是顯示不出來,qdebug 列印出來也全是?搜尋了一下解決方法,但是總解決不了。方法1 加入 qtextcodec codec qtextcodec codecforname utf 8 但是對我無效。方法2 在標頭檔案申明中加上 pragma execution ...