gpt4 book ai didi

c++ - 用curl替换\u以响应\\u

转载 作者:行者123 更新时间:2023-12-02 09:47:51 27 4
gpt4 key购买 nike

我正在Windows中使用libcurl发送请求,并且收到的响应中包含一些以\u开头的通用字符。 Libcurl无法识别此通用字符,因此,它逃避了\将通用字符转换为\\u
有没有什么办法解决这一问题?我尝试使用str.replace,但无法替换转义的序列
我用来劝阻的代码是

#include <iostream>
#include <string>
#include <cpr/cpr.h>

int main()
{
auto r = cpr::Get(cpr::Url{"http://prayer.osamaanees.repl.co/api"});
std::string data = r.text;
std::cout << data << std::endl;
return 0;
}
此代码使用 cpr库,该库是curl的包装器。
打印出以下内容:
{
"times":{"Fajr":"04:58 AM","Sunrise":"06:16 AM","Dhuhr":"12:30 PM","Asr":"04:58 PM","Maghrib":"06:43 PM","Isha":"08:00 PM"},
"date":"Tuesday, 20 Mu\u1e25arram 1442AH"
}
注意单词 Mu\u1e25arram,它本来应该是 Muḥarram,但是由于curl在您之前以\的形式转义了\ u,因此将其打印为 \u1e25

最佳答案

您的分析是错误的。 Libcurl没有逃脱任何操作。将URL加载到您选择的Web浏览器中,然后查看实际发送的原始数据。例如,这是我在Firefox中看到的内容:
raw data
服务器确实正在发送Mu\u1e25arram,而不是您期望的Muḥarram。这非常好,因为服务器正在发送回JSON数据,并且允许JSON转义这样的Unicode字符。阅读JSON spec,尤其是第9节,了解如何使用十六进制转义序列(在JSON中是可选的,但仍然允许)编码Unicode码点。 \u1e25只是的JSON十六进制转义形式。
您仅按原样打印JSON内容,就像服务器发送它一样。您实际上根本没有解析它。如果要使用实际的JSON解析器,则Mu\u1e25arram将为您解码为Muḥarram。例如,以下是Firefox解析JSON的方式:
parsed data
解码JSON数据不是libcurl的工作。它的工作仅仅是为您提供服务器发送的数据。以后根据需要解释数据是您的工作。

关于c++ - 用curl替换\u以响应\\u,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63796525/

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