Qt中的字符编码
***需清醒的认识到,编码与解码需相同。***
数据传输都是以16进制传输,然后编码是将16进制的值显示出来。
- 案例 友善串口助手 模拟
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);
QString
里面的存储编码为Unicode
。