我使用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
答案 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());