首页 新闻 会员 周边

libcurl怎么使用中文参数和接收中文数据

0
悬赏园豆:5 [已解决问题] 解决于 2016-09-05 09:32

VC中我使用了libcurl类库做HTTP请求,但使用下面的方法发送GET请求,WEB服务器接收到的是乱码

curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:1300/Test/GetTest?test=测试");

是不是需要编码一下?

 

另外WEB服务器返回的数据中有中文的话也是乱码,我使用的方法如下:

static size_t write_memory(char *data, size_t size, size_t nmemb, string *write_data)
{
    unsigned long sizes = size * nmemb;
    if (write_data == NULL) return 0;
    write_data->append(data, sizes);
    return sizes;
}
 
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_memory);
Xiongpq的主页 Xiongpq | 初学一级 | 园豆:93
提问于:2013-11-18 15:03
< >
分享
最佳答案
0

你是用的 unicode 编译的吗?

如果是你需要这样:

curl_easy_setopt(curl, CURLOPT_URL, utility::to_utf8string(L"http://localhost:1300/Test/GetTest?test=测试").c_str());

 

返回的数据是编码后的,通常不能直接作为"字符串"来使用, data 指向的 buffer 是用的什么编码,可以通过 header 的 charset 来判断.通常服务器都会返回 utf-8 编码的字节流(也不排除使用 gb2312 的).

同时这个 data 你也不一定能够作为"字符串"使用, char * 表示以 \0 结束的字符串,而这里的 data 它可能是一个字节流,所以你会看到它有 size * nmemb 的大小,而不是让你使用 strlen(data) 来求长度.

收获园豆:5
Launcher | 高人七级 |园豆:45045 | 2013-11-18 16:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册