扣扣技术交流群:460189483
在做UDP通讯时,使用QByteArray接收到的数据,其中包括接收到的中文数据,在使用QString进行显示时,会出现乱码的问题,于是找了几种方法,走过的坑,都写下来,留作查看!
// QString转QByteArray方法,这个没问题
//Qt5。12
QString str("hello");
QByteArray bytes = str.toUtf8(); // QString转QByteArray方法1
QString str("hello");
QByteArray bytes = str.toLatin1(); // QString转QByteArray方法2
//QByteArray转QString方法
方法一:如果只是字符串转换没有问题,有中文会出现乱码
QByteArray bytes("hello world");
QString string = bytes; // QByteArray转QString方法1
QByteArray bytes("hello world");
QString string;
string.prepend(bytes);// QByteArray转QString方法2
qDebug() << string;
方法二:解决了QLabel显示乱码的问题,但是没有解决QByteArray有中文会出现乱码的问题
QByteArray nameArray = array.mid(PRO_DATA_POS,10) //从array数组的pos开始,取10个字节
QString name = QString::fromLocal8Bit(nameArray); //包含中文会出现乱码
QString name = QString(nameArray); //包含中文会出现乱码
QString name = QString::fromLocal8Bit(“机器人”); //这样显示中文没问题,但是将机器人换成变量不行
QLabel *label = new QLabel();
label->setText(name);
解决方法:采样QTextCodec解码GBK编码方式解决
#include <QTextCodec>
QByteArray nameArray = array.mid(PRO_DATA_POS,10) //从array数组的pos开始,取10个字节
QTextCodec *codec = QTextCodec::codecForName("GBK");//指定QString的编码方式
QString name = codec->toUnicode(nameArray);//nameArray可以是char*,可以是QByteArray
QLabel *label = new QLabel();
label->setText(name); //这样中文显示没问题