我对QJsonObject字符编码有问题。QJsonObject::toJson()以十六进制值返回带有国际字符的字符串:
s: "żółć"
obj: QJsonObject({"s":"żółć"})
doc: QJsonDocument({"s":"żółć"})
JSON: "{\n \"s\": \"\xC5\xBC\xC3\xB3\xC5\x82\xC4\x87\"\n}\n"代码:
#include <QCoreApplication>
#include <QDebug>
#include <QJsonDocument>
#include <QJsonObject>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString s = "żółć";
qDebug() << "s: " << s;
QJsonObject obj;
obj["s"] = s;
qDebug() << "obj: " << obj;
QJsonDocument doc(obj);
qDebug() << "doc: " << doc;
qDebug() << "JSON: " << doc.toJson();
return a.exec();
}如何获得具有国际字符的JSON字符串?
发布于 2016-10-07 15:29:22
QJsonObject::toJson()以十六进制值返回带有国家字符的字符串。
假设您的意思是QJsonDocument::toJson() --这不是真的,QJsonDocument::toJson()返回一个以UTF-8编码的QByteArray,这样它就能够编码由Unicode定义的所有可能的字符或代码点。在此之后,您可以发送/保存结果QByteArray,以便稍后进行读取和解析,并且您应该能够将原始字符串从其中取出。
因此,您在调试输出中看到的HEX字符实际上并不存在,它们只是S。
通常,
QDebug在引号内打印数组,并将控制字符或非US字符转换为它们的C转义序列(\xAB)。这样,输出始终是7位干净的,并且可以从输出复制字符串,并在必要时粘贴回C++源。
您可以使用qDebug().noqoute()查看JSON字节数组的外观,而无需转义这些字符:
qDebug().noquote() << "JSON: " << doc.toJson();或者,您可以将其打印为QString,而不是:
qDebug() << "JSON: " << QString::fromUtf8(doc.toJson());注意:
在字符串中使用非ascii字符是非常糟糕的做法。您应该从资源或转义字符串文本中读取它们,同时指定它们的编码(可能使用QString::fromUtf8()、QString::fromUtf16()、.)。
https://stackoverflow.com/questions/39919295
复制相似问题