Qt中的字符編碼
需清醒的認識到,編碼與解碼需相同。
- 案例 友善串口助手 模擬
socket
客戶端,發送文本“你好”
到Qt
編寫的程序 中,未做處理時,Qt
程序中接收到的字節數組(QByteArray
)的值爲ÄãºÃ
,爲了確定編碼,將此字節數組複製到網站中,查詢到原來的編碼可能爲GBK
,在網站中查看到GBK
字符編碼中字符你好
的16進制值分別爲C4E3、BAC3
,與在Qt
中的debug
模式下顯示的值相同,所以可確定在windows 10
中 友善串口助手 中以ASCII
發送的時候,編碼是用的GBK
,剩下的就是在程序中處理數據了。
-
首先得到未處理的字節數組。
QByteArray data = socket->readAll();
-
將字節數組視爲GBK並轉爲Unicode編碼。
QTextCodec * gbk= QTextCodec::codecForName("GBK"); QString str = gbk->toUnicode(data);
-
將unicode編碼的QString轉爲指定編碼的字節數組。
const QByteArray& result = gbk->fromUnicode(s);