qt使用
unicode
來儲存,繪製以及操作字串。在很多情況下,可能想要使用不同的編碼方式來處理資料。例如大部分的日語檔案都被儲存在
shift-jis
或者iso2022
的檔案中,而俄羅斯的使用者常常使用
koi8-r
或者cp1251
編碼方式。
qt提供了乙個
qtextcodec
類集合來從
unicode
格式轉化到相應的格式。
通過qtextcodec
可以對程式預設編碼方式,有以下三種:
void setcodecforcstrings(qtextcodec *codec);
void setcodecforlocale(qtextcodec *c);
void setcodefortr(qtextcodec *c);
例如:qtextcodec gbk = qtextcodec::codecforname("gb18030");
qtextcodec::setcodefortr(gbk);
下面對這三種方法進行解析:
1.void setcodecforcstrings(qtextcodec *codec);
對程式構造字串的編碼方式,例如:
qstring str = 「
中文」;
那麼「中文」,是用
gb18030
編碼格式儲存。
2.void setcodecforlocale(qtextcodec *c);
對本地字元編碼設定,即系統的編碼格式。
qt中用於控制讀入和寫出檔案系統時的字元編碼由
qtextcodec::setcodecforlocale()
所決定,
3.void setcodefortr(qtextcodec *c);
跟第一種方式相識,
是程式在
qobject
::tr
()用到的地方,進行編碼顯示。
例如:qstring str = tr(「
中文」); 那麼
str可以進行顯示,而不會亂碼
這三種方法有相應的
get方法:
qtextcodec * codecforcstrings();
qtextcodec * codecforlocale();
qtextcodec *codecfortr();
注意:codecforcstrings()
和codecfortr()
方法,預設值為
0,即沒有提前設定編碼方式,會產生返回
null
,而codecforlocale()
,在預設情況下,返回
system
。qtextcodecs
可以使用如下一些本地編碼轉換為
unicode
字串。假設你已經在俄羅斯
koi8 - r
的編碼方式編碼的一些字串,並想將其轉換為
unicode
。最簡單的方法做到這一點是這樣:
qbytearray encodedstring = "...";
qtextcodec *codec = qtextcodec::codecforname("koi8-r");
qstring string = codec->tounicode(encodedstring);
在此之後,轉換為
unicode
字串儲存的文字。從
unicode
字串轉換為本地編碼是一樣簡單:
qstring string = "...";
qtextcodec *codec = qtextcodec::codecforname("koi8-r");
qbytearray encodedstring = codec->fromunicode(string);
通用的方式是在程式的開頭加上:
qtextcodec *gbk = qtextcodec::codecforname("gb18030");
qtextcodec::setcodecfortr(gbk);
qtextcodec::setcodecforcstrings(gbk);
qtextcodec::setcodecforlocale(gbk); 轉
utf-8
編碼:qstring str = "
中文" ;
qbytearray coded = str.toutf8();
qstring string = utf8->tounicode(coded);
qdebug() << "qobject::trutf8:" << qobject::trutf8(coded);
qdebug() << "string" << string; 由
utf-8
編碼轉gbk
編碼:qbytearray code = string.tolocal8bit();
qstring str1 = gbk->fromunicode(code);
qdebug() << "str1:" << str1;
關於字元編碼的問題
寫程式的人基本上都會遇到亂碼的問題,之前自己對字符集 編碼等問題也是一知半解,大概明白什麼意思,但卻說不清楚。由於公司需要做多語言,於是研究了一下,終於把字符集和編碼等問題弄明白了。ascii gb2312 gbk unicode utf 8 utf 16 ucs2 ucs4.對於很多人來說這些東西...
關於字元編碼的問題
這幾天一直在改 前輩 流下來的乙個程式,其中讓我很無語的是 他的字元編碼居然全在servlet 中進行轉碼的,就是這樣 string submit new string request.getparameter submit1 getbytes iso 8859 1 gbk 居然寫成這樣了 讓我來擴...
關於字元編碼的問題
在乙個activity裡面有乙個文字輸入框,我在後台通過 edittext et username edittext findviewbyid r.id.username string username new string et username.gettext tostring 這樣拿到的字串不...