首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QJsonObject与国际字符

QJsonObject与国际字符
EN

Stack Overflow用户
提问于 2016-10-07 14:09:01
回答 1查看 1.8K关注 0票数 0

我对QJsonObject字符编码有问题。QJsonObject::toJson()以十六进制值返回带有国际字符的字符串:

代码语言:javascript
复制
s:  "żółć"
obj:  QJsonObject({"s":"żółć"})
doc:  QJsonDocument({"s":"żółć"})
JSON:  "{\n    \"s\": \"\xC5\xBC\xC3\xB3\xC5\x82\xC4\x87\"\n}\n"

代码:

代码语言:javascript
复制
#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字符串?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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字节数组的外观,而无需转义这些字符:

代码语言:javascript
复制
qDebug().noquote() << "JSON: " << doc.toJson();

或者,您可以将其打印为QString,而不是:

代码语言:javascript
复制
qDebug() << "JSON: " << QString::fromUtf8(doc.toJson());

注意:

在字符串中使用非ascii字符是非常糟糕的做法。您应该从资源或转义字符串文本中读取它们,同时指定它们的编码(可能使用QString::fromUtf8()QString::fromUtf16()、.)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39919295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档