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);
你是用的 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) 来求长度.