繁体   English   中英

如何将QByteArray转换为QString?

[英]How to convert QByteArray to QString?

这是JAVA中的HttpServer,它将俄语字符串发送到Qt应用程序:

 public void handle(HttpExchange t) throws IOException {
        //Response from server in Russian
        String response = "Ответ от сервера на русском языке"; //"Response from server in Russian"
        t.sendResponseHeaders(200, response.length());
        OutputStream os = t.getResponseBody();
        //os.write(response.getBytes());
       //right now I am trying this code
      os.write(response.getBytes(Charset.forName("UTF-8"))); //and UTF-16
       //also I have tried this
        os.write(Charset.forName("UTF-16").encode(response).array());

        os.close();
    }

Qt中的应用程序从服务器获取响应(俄语文本)

 void MainWindow::Response(QNetworkReply *reply) {
    QByteArray data = reply->readAll();
   // Also I've tried this
   // QString dataString = (QString)reply->readAll();
   // QString dataLine = (QString)reply->readLine();
   // QString str=  QString::fromUtf8(data);
    qDebug() << "data from server: " << data;
     label->setText(str);
} 

我只想在控制台或标签组件中显示普通字符串,但是我有空字符串或字节数组或问号序列

“ \\ xCE \\ xF2 \\ xE2 \\ xE5 \\ xF2 \\ xEE \\ xF2 \\ xF1 \\ xE5 \\ xF0 \\ xE2 \\ xE5 \\ xF0 \\ xE0 \\ xED \\ xE0 \\ xF0 \\ xF3 \\ xF1 \\ xF1 \\ xEA \\ xEE \\ xEC \\ xFF \\ XE7 \\ XFB \\ XEA \\ xE5"

我该如何解决编码问题并将此数组转换为QString并最终看到普通文本?

的getBytes

 public byte[] getBytes() 

使用平台的默认字符集将此String编码为字节序列,并将结果存储到新的字节数组中。

未指定无法在默认字符集中编码此字符串时此方法的行为。 当需要对编码过程进行更多控制时,应使用CharsetEncoder类。

使用这种方法序列化字符串是一个糟糕的主意。 “平台默认编码”取决于当前的语言环境,操作系统和其他方面,而您希望使用定义良好的编码在应用程序之间传输数据。

实际上,当您说“我已经尝试了一切,没有任何作用”时,我相信您-这是因为您的字符串是以Windows-1251编码进行编码的,而Windows-1251编码可能恰好是Windows计算机的默认8位编码。 当您尝试在Qt端对其进行解码时-从Qt5开始,在解码8位字符串时,默认情况下始终期望UTF-8,一切都会中断。


首先,在Java端,将您的字符串编码为UTF8 ,确保正确指定响应长度(您必须提供要写入的字节数,而不是源字符串中的字符数):

String response = "Ответ от сервера на русском языке"; //"Response from server in Russian"
byte[] response_data = response.getBytes("UTF-8");
t.sendResponseHeaders(200, response_data.length());
OutputStream os = t.getResponseBody();
os.write(response_data);
os.close();

然后,在Qt端,您可以从QByteArray构建一个QString ,指定它位于UTF8中。

QByteArray data = reply->readAll();
QString str = QString::fromUtf8(data);

(请注意,您也可以使用UTF-16或UTF-32发送字符串,但当然双方必须匹配;我选择了UTF-8,因为它作为“在线”格式更为常见,并且通常更紧凑)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM