我需要发送一个http-post请求到服务器。我选择使用libcurl函数。请求数据必须像xml格式。因此,我使用libxml2将字符串转换为xml,然后将xml文件读入buf,将buf传递给libcurl,完成发布请求。 由encoding-utf8中的libxml2创建的XML文件,当我将数据发送到libcurl函数时,它似乎是正常的。但是我把包裹拿到服务器上,发现英文字符都是正常的,但是我的母语“中国人”被替换为'?',好吧,它真的让我很困惑。 现在我该怎么做,我可以设置libcurl函数来传输utf-8字符串吗?我的测试环境是linux c。 这是libxml2的创建我的XML:如何通过libcurl传输从libxml2读取的字符串?
<vehicleName>±GM7180LE AT</vehicleName>
可以看到,英文字符都是正常的。前两个字符都是中文。 他们应该是“别克”。 libxml2自动将它从gb2312转换为utf8。
xmlSaveFormatFileEnc(createXML, doc, "UTF-8", 1);
然后我发送从这个XML到的libcurl功能读取的字符串,但我发现的事实是:所述服务器接收到的数据是不喜欢±GM但?? GM。 libcurl代码是 curl_easy_setopt(curl,CURLOPT_URL,ip_addr); curl_easy_setopt(curl,CURLOPT_POSTFIELDS,requestMsg); curl_easy_setopt(curl,CURLOPT_POSTFIELDSIZE,strlen(requestMsg)); 现在我该怎么做?
答ALFE: 的libxml2的代码如下:
char licenseNo_text[20] = "沪33333";
licenseNo = xmlNewNode(NULL, BAD_CAST "licenseNo");
content = xmlNewText(BAD_CAST licenseNo_text);
xmlAddChild(QueryVehicleModelRequest, licenseNo);
xmlAddChild(licenseNo, content);
后,我将节点添加到XML文件,我看了它变成一个BUF:
while ((ch = getc(fp)) != EOF) {
if (ch != '\n')
buf[i++] = ch;
}
我觉得BUF已经在utf-8中,所以我直接将它传递给libcurl函数:
ret = func_libcurl(buf, headerfilename, bodyfilename);
func_libcurl代码是, requestMsg是HTTP-POST的头部和身体:
curl_easy_setopt(curl, CURLOPT_URL, ip_addr);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, requestMsg);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(requestMsg));
headerfilename,bodyfilename是文件描述符,保存从服务器响应数据。
最后,我使用libxml2来解析文件“bodyfilename”。文件“bodyfilename”保存了服务器的响应数据。它在utf-8中,我可以成功解析成gb2312。
就是这样。
显然这是一个编码问题。请更详细地描述(一些源代码会很好),你在做什么。在字符串文字或类似文字之前,通常会遇到小小的错误,例如缺少前缀“u”。 – Alfe
好的。例如: – lalala23456
在这个问题中,我描述它:@Alfe – lalala23456