【问题标题】:convert QByteArray to QString is empty将 QByteArray 转换为 QString 为空
【发布时间】:2018-11-06 06:54:06
【问题描述】:

我使用 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

【问题讨论】:

  • qDebug() &lt;&lt;"ba:" &lt;&lt; ba; 的输出是什么?
  • QByteArray request = ba; 是干什么用的?

标签: qt


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您的消息不是用 utf8 编码的,可能是 GB18030。 在你的 main 函数中,你必须设置你的编解码器。

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

    然后就可以处理消息了(我用的是Qt4)。

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

    【讨论】:

      【解决方案3】:
      ...
      QJsonDocument doc(jobject);
      ByteArray arr = doc.toJson();
      
      //Just cast
      QString result = static_cast<QString>(doc.toJson());
      

      【讨论】:

        猜你喜欢
        • 2012-07-02
        • 2017-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-30
        • 2011-07-14
        • 1970-01-01
        • 2017-12-12
        相关资源
        最近更新 更多