我很想在Windows下以正确的格式从服务器获取响应。我尝试了两个C ++库Beast(基于Boost Asio)和Cpr(基于libcurl),我得到了两个完全相同的问题。
奇怪的是,我也在C#(HttpClient)中尝试了这一点,一切正常。此外,在Postman和其他REST工具中它看起来不错。
当我发布到服务器并且应该取回René这个名字时,我会得到Ren�。其他欧洲角色如æ,ø,å,ö给出了同样奇怪的输出。对我来说,看起来像utf-8 / iso-8859-1的问题,但我无法弄明白。服务器(基于node.js)和响应设置为推出utf-8。我们试图重定向响应,以便它不会访问数据库或类似的东西。所以,问题出现在C ++之下。对我能尝试的任何建议都将不胜感激。
示例代码:
nlohmann::json test_json = nlohmann::json
{
{ "text", "Hi, my name is René" },
{ "language", "en" }
};
auto r = cpr::Post(cpr::Url{ "http://www.exampleserver.com" },
cpr::Body{ test_json.dump() },
cpr::Header{ { "content-type", "application/json; charset=utf-8" } });
std::cout << r.text << std::endl;
答案 0 :(得分:1)
看起来你已经发送了一些ISO-8859-1内容,但它被标记为UTF-8。这会导致整个转换错误,这可能会使非ASCII字符无法识别。
解决此问题的方法是识别非UTF-8数据并正确转换它,或使用正确的MIME类型和编码识别有效负载。
答案 1 :(得分:0)
您的问题在于编码字符串。该字符串最有可能返回UTF-8编码,但您没有正确转换它。
有各种库可以帮助您转换。这一切都取决于您正在使用的C ++版本。很难告诉你在没有更多细节的情况下使用什么。