gpt4 book ai didi

qt - Disqus API 结果的编码问题(2 个 Unicode 字符应被解释为一个)

转载 作者:行者123 更新时间:2023-12-04 02:28:04 25 4
gpt4 key购买 nike

我有一个 Qt 应用程序,它从 Disqus API 接收 JSON 对象中的字符串:

{ "title": "Swiftkey pr\u0102\u0160dit votre choix d\u2019emoji gr\u0102\u02d8ce au clavier Swiftmoji" }

(还有更多,但我只写重要的在这里)

然后我将 title 字符串放入 QString 中:

// Assuming that "reply" is the QNetworkReply * containing the Disqus API response.
QByteArray disqusReply = reply->readAll();
// disqusReply == "{ \"title\": \"Swiftkey pr\u0102\u0160dit votre choix d\u2019emoji\ gr\u0102\u02d8ce au clavier Swiftmoji" }"
QJsonDocument doc = QJsonDocument::fromJson(disqusReply);
QJsonObject obj = doc.object();
QString title = obj["title"].toString();

后来我把它写在一个QML Text中。它应该显示“Swiftkey prédit votre choix d'emoji grâce au clavier Swiftmoji”,但它显示“Swiftkey prĂŠdit votre choix d'emoji grâce au clavier Swiftmoji”。

如您所见,存在一些编码问题,两个连续的 Unicode 字符应仅解释为一个字符(“ĂŠ”而不是“é”和“â”而不是“à”)。我怎样才能(使用 Qt 或 QML)显示正确的字符?为了解决这些编码问题,我必须执行哪些编码转换(使用 Qt 或 QML)?

附加信息:该错误发生在 Windows 10 64 位系统上。

编辑:您可以在此处找到错误:https://disqus.com/api/3.0/threads/list.json?since=2016-05-18T14%3A08%3A27%2B00%3A00&forum=frandroid&api_key=7o0xSBOEzN2AG6yxcJgeJbeEbACBfGhgnoIRHu7umbifKAvXQpisYKT3KSXF9nPN

最佳答案

好吧,我认为问题出在双重编码或其他来自服务器端的问题,而不是来自客户端的问题。因为你的代码必须是 pr\u00e9dit 而不是 pr\u0102\u0160dit。如果您将使用 clean_title 而不是 json-answer 的 title,您将获得正确的字符串,因为它的编码是正确的。

更新:

正如我在评论中所说 - 有两个关于相同新闻的回复。 ID 4836688567 编码字符串错误。 4836587900 正确。有许多不同编码的新闻双重变体。

首先:

{
"feed":"https://frandroid.disqus.com/httpwwwfrandroidcomandroidapplications358721_swiftkey_predire_choix_demoji_grace_clavier_swiftmoji/latest.rss",
"identifiers":[],
"dislikes":0,
"likes":0,
"message":"",
"id":"4836688567",
"createdAt":"2016-05-18T09:08:43",
"category":"448171",
"author":"3938134",
"userScore":0,
"isSpam":false,
"signedLink":"http://disq.us/?url=http%3A%2F%2Fwww.frandroid.com%2Fandroid%2Fapplications%2F358721_swiftkey-predire-choix-demoji-grace-clavier-swiftmoji&key=nqCbe6jgfwM-skLyqTf3lg",
"isDeleted":false,
"raw_message":"",
"isClosed":false,
"link":"http://www.frandroid.com/android/applications/358721_swiftkey-predire-choix-demoji-grace-clavier-swiftmoji",
"slug":"httpwwwfrandroidcomandroidapplications358721_swiftkey_predire_choix_demoji_grace_clavier_swiftmoji",
"forum":"frandroid",
"clean_title":"Swiftkey pr\u0102\u0160dit votre choix d\u2019emoji gr\u0102\u02d8ce au clavier Swiftmoji",
"posts":0,
"userSubscription":false,
"title":"Swiftkey pr\u0102\u0160dit votre choix d\u2019emoji gr\u0102\u02d8ce au clavier Swiftmoji",
"highlightedPost":null
}

第二:

{
"feed":"https://frandroid.disqus.com/swiftkey_predit_votre_choix_d8217emoji_grace_au_clavier_swiftmoji/latest.rss",
"identifiers":["358721 http://www.frandroid.com/?p=358721"],
"dislikes":0,
"likes":1,
"message":"",
"id":"4836587900",
"createdAt":"2016-05-18T08:16:30",
"category":"448171",
"author":"3938134",
"userScore":0,
"isSpam":false,
"signedLink":"http://disq.us/?url=http%3A%2F%2Fwww.frandroid.com%2Fandroid%2Fapplications%2Fgoogle-apps%2F358721_swiftkey-predire-choix-demoji-grace-clavier-swiftmoji&key=UU8IrLN_UDXEggF6wHjAYg",
"isDeleted":false,
"raw_message":"",
"isClosed":false,
"link":"http://www.frandroid.com/android/applications/google-apps/358721_swiftkey-predire-choix-demoji-grace-clavier-swiftmoji",
"slug":"swiftkey_predit_votre_choix_d8217emoji_grace_au_clavier_swiftmoji",
"forum":"frandroid",
"clean_title":"Swiftkey pr\u00e9dit votre choix d\u2019emoji gr\u00e2ce au clavier Swiftmoji",
"posts":13,
"userSubscription":false,
"title":"Swiftkey pr\u00e9dit votre choix d’emoji gr\u00e2ce au clavier Swiftmoji",
"highlightedPost":null
}

如您所见,新闻来源的网址不同。但为什么其中一些编码错误 - 这是一个问题。

更新 2:

或者可能是 RSS 错误。让我们使用 prédit 词。在第二个变体中,RSS 返回带有已经编码为 é 的内容的 xml,并且提要链接看起来很正常。在第一个变体中,RSS 返回 ĂŠ 并且它的提要链接看起来很不正常 - 感觉它需要整个 url 并进行另一个编码。

关于qt - Disqus API 结果的编码问题(2 个 Unicode 字符应被解释为一个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37302095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com