将QByteArray转换为QString为空

时间:2018-11-06 06:54:07

标签: qt

我使用QTcpSocket :: readAll()得到了一个QByteArray。但是,当我使用QString :: fromUtf8()将其转换为QString时,我得到了一个空的QString。

QByteArray ba;
QDataStream in(&ba,QIODevice::ReadWrite);
in << socket->readAll();
QByteArray request = ba;
qDebug() <<"ba:" << ba; // right message

然后:

QString request = QString::fromUtf8(ba); // request is empty
QString request = QString(ba) //also empty

3 个答案:

答案 0 :(得分:0)

也许您的字节数组具有不同的文本编码(西里尔字母-win1251或DOS-cp866)。要将具有特定编码的字节数组转换为字符串,请使用QTextCodec

QByteArray ba("abcd");
QTextCodec *codec = QTextCodec::codecForName("CP1251");
QString str = codec->toUnicode(ba);

答案 1 :(得分:0)

您的消息未使用utf8编码,可能是GB18030。 在主要功能中,您必须设置编解码器。

QTextCodec *gb = QTextCodec::codecForName("gb18030");
QTextCodec::setCodecForLocale(gb);

然后您可以处理消息(我正在使用Qt4)。

QByteArray ba = s->readAll();
QString request = QString::fromLocal8Bit(ba.data(),ba.size());

答案 2 :(得分:0)

...
QJsonDocument doc(jobject);
ByteArray arr = doc.toJson();

//Just cast
QString result = static_cast<QString>(doc.toJson());