一般在window開發環境裡,是gbk編碼,在linux開發環境裡,是utf-8編碼,關於編碼的定義, 我就不這裡多說了,網上有一大堆資料可以檢視。
qt 對預設的是 unicode 編碼, 在window開發環境裡,比較通用的寫法是: 在main.cpp檔案中加入:
1. qtextcodec *gbk = qtextcodec::codecforname("gb18030");
2. qtextcodec::setcodecfortr(gbk);
3. qtextcodec::setcodecforlocale(gbk);
4. qtextcodec::setcodecforcstrings(gbk);
第一行:定義gb18030編碼格式
第二行: 這個函式的作用是設定傳給tr函式時的預設字串編碼 ,gui設計中最常用的一種。
第三行:這個函式主要用於設定和對本地檔案系統讀寫時候的預設編碼格式。比如通過流讀取乙個檔案內容時的編碼格式 。或者通過qdebug()輸出列印資訊時的編碼 。
第四行:這個函式主要是用在字元常量或者qbytearray構造qstring物件時使用的一種編碼方式 。
同理,在linux開發環境裡, 通用的寫法是:
qtextcodec *utg8 = qtextcodec::codecforname("utf-8");
qtextcodec::setcodecfortr(utg8 );
qtextcodec::setcodecforlocale(utg8 );
qtextcodec::setcodecforcstrings(utg8 );
一般我們做gui設計的時候, 用到最多的也就是setcodecfortr()這個函式了,其他可以根據自己所用到的區域在設定,不過,為了通用編碼,以便忘記了編碼格式而弄的自己頭痛, 建議還是把這三個統一設定一下吧,盡量避免中文亂碼出現的概率。
下面講一下關於編碼轉換問題
qt中的qstring內容使用unicode作為文字編碼。但是實際系統中通常採用的是其他編碼,例如gbk,utf8等。為了便於相容這些格式,qt中還設定了兩個字串型別:
qcstring類: c型別字串,必須以0結尾,也就是中間不能含有0. 例如gbk編碼的字串
qbytearray類: 中間可以含有0.例如utf8編碼的字串
在設定下面的**基礎上:
qtextcodec *gbk = qtextcodec::codecforname("gb18030");
qtextcodec *utg8 = qtextcodec::codecforname("utf-8");
qtextcodec::setcodecfortr(gbk);
qtextcodec::setcodecforlocale(gbk);
qtextcodec::setcodecforcstrings(gbk);
1. utf-8 轉換 gbk
qstring u2g(qstring utfstr)
return gbk->tounicode(utfstr.tolocal8bit());
2 gbk 轉換 utf-8
qstring u2g(qstring gbkstr)
return utg8->tounicode(gbkstr.toutf8());
qtextcodec *gbk = qtextcodec::codecforname("gb18030");
qtextcodec *utf8 = qtextcodec::codecforname("utf-8");
qtextcodec::setcodecfortr(gbk);
qtextcodec::setcodecforlocale(gbk);
qtextcodec::setcodecforcstrings(gbk);
qfile file("../test.txt");
file.open(qiodevice::readonly);
qbytearray readbyte = file.readall();
qstring readstr = utf8->tounicode(readbyte.data());
file.close();
qstring utfstr = qobject::trutf8(readbyte); //utf-8
qstring gbkstr = qobject::tr("中文"); // gbk
qstring utf2gbk = gbk->tounicode(readstr.tolocal8bit()); // utf8 conver gbk
qstring gbk2utf1 = utf8->tounicode(utf2gbk.toutf8()); // gbk convert utf8
qstring g2u = gbk->tounicode(gbk->fromunicode(readstr)); // gbk convert utf8
qdebug() << "gbk:" << gbkstr;
qdebug() << "utf8:" << utfstr;
qdebug() << "readstr:" << readstr;
qdebug() << "read_size:" << readbyte.length();
qdebug() << "utf2gbk:" qlabel *label = new qlabel(utf2gbk);
label->show();
QT 編碼問題
執行字符集 可執行應用程式內使用何種字元編碼。編譯器會將原始碼字符集轉換為執行字符集 bom識別符號 識別原始檔編碼 qt5中qstring內部採用unicode字符集,utf 16編碼。建構函式qstring qstring const char str 預設使用fromutf8 將str所指的執...
Qt 編碼問題QTextCodec
收藏 編輯 一般在window開發環境裡,是gbk編碼,在linux開發環境裡,是utf 8編碼,關於編碼的定義,我就不這裡多說了,網上有一大堆資料可以檢視。qt對預設的是unicode編碼,在window開發環境裡,比較通用的寫法是 在main.cpp檔案中加入 1.qtextcodec gbk ...
QT 編碼格式問題
一 qt客戶端與服務端通訊 客戶端先將資料進行序列化xml形式,然後利用sharpziplib gzip compress進行壓縮,轉換成base64格式 源資料 壓縮並轉換成base64位資料 h4siaaaaaaaa y2nwq6cmbbef6xp2ynevrmmhamjefgaukfsblfy...