Qt 編碼問題QTextCodec

2021-05-26 08:46:00 字數 2747 閱讀 2924

一般在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...