关于curl返回数据乱码的问题解决方法

今天需要爬某个网站的数据,chrome打开开发者工具顺利的找到API,然后拿出curl大法,走起!

首先,模拟登录,顺利的拿到数据,但是返回的数据让我懵逼了。

在浏览器开发者工具看到的是正常的数据,但是我curl出来的是一堆乱码,“度”他娘很久都没找到答案,最后“谷”他哥第一条就找到解决办法了,唉,所以为了多活几年,还是用谷哥啊。

解决方法很简单,乱码是因为返回的数据被压缩过了,在curl中加上一项参数即可:

curl_setopt($ch, CURLOPT_ENCODING, "");

以前的项目中都是自动解压的,为什么这个没有,等有时间再琢磨琢磨。

你好!对于libcurl中出现的中文乱码问题,有几个可能的原因和解决方法。 1. 字符编码设置问题:libcurl默认使用ASCII编码。如果你需要传输和接收中文字符,可以使用`CURLOPT_ENCODING`选项来设置字符编码为UTF-8,例如: ```C curl_easy_setopt(curl, CURLOPT_ENCODING, "UTF-8"); ``` 2. 字符集转换问题:如果你在接收到的数据中发现了乱码,可能是因为字符集不一致。你可以使用第三方库如iconv或iconv-lite来进行字符集转换。例如,将接收到的数据从UTF-8转换为GBK: ```C #include <iconv.h> // ... // 创建iconv转换句柄 iconv_t cd = iconv_open("GBK", "UTF-8"); if (cd == (iconv_t)-1) { // 转换句柄创建失败,处理错误 } // 输入和输出缓冲区 char* inbuf = input_data; // 输入数据 size_t inbytesleft = input_length; // 输入数据长度 char* outbuf = output_data; // 输出数据 size_t outbytesleft = output_length; // 输出数据长度 // 进行转换 size_t r = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); if (r == (size_t)-1) { // 转换失败,处理错误 } // 关闭转换句柄 if (iconv_close(cd) != 0) { // 关闭转换句柄失败,处理错误 } ``` 3. HTTP头部设置问题:确保在发送HTTP请求时设置正确的Content-Type头部。例如,如果你发送的是UTF-8编码的数据,可以设置如下: ```C struct curl_slist* headers = NULL; headers = curl_slist_append(headers, "Content-Type: text/plain; charset=UTF-8"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); ``` 这些是一些可能出现中文乱码问题的常见解决方法,希望能对你有所帮助!如果还有其他问题,请随时提问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值