Qt中關於中文字元編碼問題

2021-07-11 04:32:41 字數 1252 閱讀 3506

qstring filepath;

filepath = qfiledialog::getopenfilename(null,qstring("開啟戶型圖"),qstring(),qstring("戶型**件(*.bmp *.jpg *.png)"));

編譯器報如下錯誤:

e:\qt projects\huxing\src\mainwindow.cpp:87: error: c2146: 語法錯誤: 缺少「)」(在識別符號「鎴峰瀷鍥炬枃浠」的前面)

不用說,一定是中文編碼的問題。於是在網上查閱了一番資料,得出了以下一些心得。

中文字元一般採用兩套編碼,gbk和utf-8。windows平台下一般是gbk編碼,其他平台一般是utf-8。我的這個原始檔是用qtcreator生成的,在工具-》選項-》文字編輯器-》行為中我設定了預設編碼為utf-8,而我的編譯器是msvc,編碼為gbk,所以就產生了錯誤。

解決方法很簡單:

第一種,更改qtcreator的編碼為gbk,然後新建原始檔,把舊檔案裡的**全部拷貝過去。缺點麼,採用gbk而不是utf-8就是最大的缺點了。

第二種,與上面一樣,但改編碼為utf-8+bom。需要在原始檔頭部新增如下**來告訴msvc使用utf-8的執行字符集:

#if _msc_ver >= 1600

#pragma execution_character_set("utf-8")

#endif

第三種,改為使用mingw的編譯器。

這種編碼問題只是原始檔中的。另乙個編碼問題是生成的目標程式中的。要讓沒有裝gbk編碼的系統也能識別程式中的中文,就需要將程式中的中文編碼為utf-8。qstring類內建的編碼就是unicode,因此,只要將所有中文轉換為qstring就可以了。需要注意的是在轉換時要讓qt知道被轉換的串的編碼。例如,如果原始檔編碼為gbk,在qt4中,可以這樣寫:

qtextcodec::setcodecforcstring(qtextcodec::codecforname("gb2312"));

qtextcodec::setcodecfortr(qtextcodec::codecforname("gb2312"));

但是,在qt5中,這兩個函式被去除了,因此無法再用這種方法指定編碼。不過,qt5預設採用utf-8的執行字符集,因此如果使用mingw的編譯器,就沒有問題了。但如果是msvc的編譯器,還是需要採用上面所說的方法。

Qt開發 Qt中的中文字元問題

之前查了關於處理中文字元的一些資料,說法不一,有些方法又沒有效果。只好最終自己嘗試了一種適合當前程式的方法。1 首先在主函式中重置程式的預設字元編碼 int main int argc,char argv 其中qtextcodec codecforlocale 是用來返回系統的預設編碼的,另外也可以...

Java 中文字元編碼

public class test for int i 0 i string類的不帶引數的getbytes 方法會以程式所執行平台的預設編碼方式為準來進行轉換,在不同環境下可能會有不同的結果,因此建議使用指定編碼方式的getbytes string charsetname 方法。public sta...

QT 中文字元亂碼

qstring qbytearray 後位元組碼與window下的不對。下面的中文字元 中國人民億 data是我正常後的gbk位元組,value是直接使用 qstring totoutf8 qstring tolocal8bit 之類的與期望不符的位元組碼。首先qstring 轉換成qbytearr...