gpt4 book ai didi

C++、JsonCpp、libcurl 和 UTF-8 问题

转载 作者:太空宇宙 更新时间:2023-11-04 12:23:22 25 4
gpt4 key购买 nike

我在使 libcurl 与 C++ JsonCpp 库一起工作时遇到了一些问题,经过大量研究,我想出了这段代码:

int post(const string& call, const string& key, const string& value) {
// (...)

char* char_data=NULL;
struct curl_slist *headers=NULL;

headers = curl_slist_append(headers, "Content-Type: application/json; charset=UTF-8");

Json::Value root;
root[key] = value;

Json::StyledWriter writer;
string data = writer.write(root);

char_data = (char*) malloc((strlen(data.c_str())+1) * sizeof(char));
strcpy(char_data, data.c_str());

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, char_data);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(char_data));

// (...)
}

只要 data(保存 JSON 字符串表示的 C++ std::string)没有任何非 ascii 字符,这就可以正常工作。当它发生时,我从后端收到一个错误(用 Rails 3 编写):

Started POST "/deployments/4c904f607d7c4249cf00002c/log.json" for 67.23.79.89 at Wed Sep 15 00:45:40 -0400 2010
Processing by DeploymentsController#log as JSON
Parameters: {"log"=>"0 upgraded, 0 newly \214\211K########talled, 0 to remove and 46 not upgraded.\n", "id"=>"4c904f607d7c4249cf00002c"}
Completed in 6ms

BSON::InvalidStringEncoding (String not valid UTF-8):
app/models/deployment.rb:161:in `log'
app/models/deployment.rb:160:in `each'
app/models/deployment.rb:160:in `log'
app/controllers/deployments_controller.rb:54:in `log'

采用 C++ 字符串(在本例中为数据)并将其安全地转换为 UTF-8,然后转换为可与 libcurl 配合使用的 *char 变量的最佳方法是什么?

最佳答案

我发现了问题。它不在代码的那部分。我实际上是在进行导致问题的字符串拆分。

关于C++、JsonCpp、libcurl 和 UTF-8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3719907/

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