簡體   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