Qt中中文字元轉換問題
1 QString是按unicode編碼的,如果需要8bit編碼則要加 tr(),要與 char* 相互轉換則需要制定編碼格式:utf-8,gb2312,gbk等
2 自己遇到的問題:
通過 QString轉換為char*時,全是“????”
程式設計是在main函式中制定tr()的編碼格式未utf-8但是沒有指定 string的編碼格式
3 解決方法:
1)需要制定 tr(),和 cstring的編碼格式,在main函式中加兩句程式碼:
- QTextCodec::setCodecForTr( QTextCodec::codecForName("utf-8"));
- QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
2)取得QString物件後,通過QByteArray轉換為char*:
- QString
- char c[20] = { 0};
- QByteArray ba = str.toAscaii(); //用其它,諸如toLantin1仍然得到亂的
- snprintf(c,szieof(c),"%s",ba.data()); // 可以得到正確的char*了,
3)char*轉換為QString
- QString str;
- char c[20] = {"我愛QT"};
- str = QString::fromAscaii(c,stlen(c)); //這樣就得到char*轉為正確的QSstring
Qt5 取消了QTextCodec::setCodecForTr()和QTextCodec::setCodecForCString()這兩個函式。
直接將 QTextCodec::setCodecForLocale(QTextCodec::codecForName(“UTF8”)) 至於QApplication例項之前即可解決;
1 QString是按unicode編碼的,如果需要8bit編碼則要加 tr(),要與 char* 相互轉換則需要制定編碼格式:utf-8,gb2312,gbk等
2 自己遇到的問題:
通過 QString轉換為char*時,全是“????”
程式設計是在main函式中制定tr()的編碼格式未utf-8但是沒有指定 string的編碼格式
3 解決方法:
1)需要制定 tr(),和 cstring的編碼格式,在main函式中加兩句程式碼:
- QTextCodec::setCodecForTr( QTextCodec::codecForName("utf-8"));
- QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
2)取得QString物件後,通過QByteArray轉換為char*:
- QString str = "我愛QT"
- char c[20] = { 0};
- QByteArray ba = str.toAscaii(); //用其它,諸如toLantin1仍然得到亂的
- snprintf(c,szieof(c),"%s",ba.data()); // 可以得到正確的char*了,
3)char*轉換為QString
- QString str;
- char c[20] = {"我愛QT"};
- str = QString::fromAscaii(c,stlen(c)); //這樣就得到char*轉為正確的QSstring
Qt5 取消了QTextCodec::setCodecForTr()和QTextCodec::setCodecForCString()這兩個函式。
直接將 QTextCodec::setCodecForLocale(QTextCodec::codecForName(“UTF8”)) 至於QApplication例項之前即可解決;