如何将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()
使用平台的默认字符集将此字符串编码为字节序列,并将结果存储到新的字节数组中。
未指定无法在默认字符集中编码此字符串时此方法的行为。当需要对编码过程进行更多控制时,应使用
CharsetEncoder
类。
使用此方法序列化字符串是一个糟糕的主意;"平台默认编码"取决于当前的语言环境、操作系统等,而您希望使用定义良好的编码在应用程序之间传输数据。
事实上,当你说"我已经尝试了一切,没有任何效果"时,我相信你 - 那是因为你的字符串是用 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 是因为它作为"在线"格式更常见,而且它通常更紧凑)
- 将 hh:mm:ss.zzz 时间 QString 转换为毫秒的单行函数?
- 如何将包含指数的 QString 转换为C++中的双倍?
- 删除unicode def后,无法将QString转换为TCHAR
- 在Qt中将QString转换为ASCII值,反之亦然
- 如何在Windows上将Qt QString转换为LPCTSTR
- 将 QString 转换为 QJsonArray
- QByteArray 和 QString 转换的问题
- q致命参数:将 QString 转换为常量字符* 会导致警告"format string is not a string literal"
- 将QString转换为uintptr_t,qt / c
- 无法将 QString 转换为 Const Char*
- 处理字符到QString转换中的ASCII字符
- 将QString转换为QString的指针
- 使用 QList 将 Qstring 转换为双倍
- 将 QString 转换为 uint16*
- 将 QString 转换为无符号短整型
- 将十六进制 QString 转换为 UTF-8 QString
- 如何在 Visual Studio 2013 中将 Qt5 中的 QString 转换为 LPCSTR
- QString::compare() vs 将 QString 转换为数字然后进行比较
- 正在将QString转换为std::string
- 如何将QString转换为特定格式的QDate