QT utf8編碼轉gb2312編碼,互相轉換的原始碼
阿新 • • 發佈:2019-01-23
任何編碼先轉換成統一編碼toUnicode(),然後再轉出fromUnicode();
gb2312轉utf8:
QString ssss=QString::fromLocal8Bit("ceshi我是測試"); //注意此處定義gb2312編碼的方式,要使用fromLocal8Bit()
gb2312ToUtf8(ssss);
utf8轉gb2312:
入參是utf8編碼的字元陣列
(注意引數的編碼格式一定要對,否則轉換不出來,尤其是gb2312ToUtf8()這個函式,極為容易傳入unicode編碼格式的引數)
上程式碼:
void gb2312ToUtf8(QString strGb2312) { printf("@@@ gb2312 str is:%s\n",strGb2312.toLocal8Bit().data()); QTextCodec* utf8Codec= QTextCodec::codecForName("utf-8"); QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312"); QString strUnicode= gb2312Codec->toUnicode(strGb2312.toLocal8Bit().data()); QByteArray ByteUtf8= utf8Codec->fromUnicode(strUnicode); char *utf8code = ByteUtf8.data(); printf("@@@ Utf8 strGb2312toUtf8:%s\n",utf8code); } /////////////////////////////////////////////////////////////////////// void utf8ToGb2312(char *strUtf8) { printf("~~~~ utf8 str is:%s\n", strUtf8); QTextCodec* utf8Codec= QTextCodec::codecForName("utf-8"); QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312"); QString strUnicode= utf8Codec ->toUnicode(strUtf8); QByteArray ByteGb2312= gb2312Codec ->fromUnicode(strUnicode); strUtf8= ByteGb2312.data(); printf("~~~~~ gb2312 strUtf8toGb2312:%s\n", strUtf8); }
修改了一下utf8ToGb2312使之轉換後的gb2312字串型別為QString:
QString utf8ToGb2312(char *strUtf8) { printf("~~~~utf8 strUtf8:%s\n", strUtf8); QTextCodec* utf8Codec= QTextCodec::codecForName("utf-8"); QTextCodec* gb2312Codec = QTextCodec::codecForName("gb2312"); QString strUnicode= utf8Codec ->toUnicode(strUtf8); QByteArray ByteGb2312= gb2312Codec ->fromUnicode(strUnicode); strUtf8= ByteGb2312.data(); printf("~~~~~gb2312 strUtf8toGb2312:%s\n", strUtf8); return QString::fromLocal8Bit(strUtf8);//注意這裡要fromLocal8Bit() }