Nodejs request 请求到的数据为乱码,求解决
Nodejs request 请求到的数据为乱码,求解决
这个链接请求的数据结果乱码,求解决
http://zhuanlan.zhihu.com/api/columns/bigertech/posts/19885746
在浏览器中打开是正确的,自己使用 request
模块,请求到的数据就是乱码,
不知道用的什么编码格式编码的 ,
跪求指导怎么解码?
var request = require('request');
request('http://zhuanlan.zhihu.com/api/columns/bigertech/posts/19885746', function (req,res,body) {
console.log(body);
});
当然可以。根据你的描述,你遇到的问题可能是由于字符编码不正确导致的。在 Node.js 中使用 request
模块请求数据时,需要确保正确处理响应的字符编码。以下是一个示例代码,展示了如何正确处理编码问题:
const request = require('request');
request({
url: 'http://zhuanlan.zhihu.com/api/columns/bigertech/posts/19885746',
encoding: null // 将编码设置为 null,以确保返回二进制数据
}, (err, res, body) => {
if (err) {
console.error('请求失败:', err);
return;
}
// 检查响应头中的 Content-Type,并获取字符编码
const contentType = res.headers['content-type'] || '';
const charsetMatch = contentType.match(/charset=([\w-]+)/i);
let charset = charsetMatch ? charsetMatch[1] : 'utf-8'; // 默认使用 utf-8 编码
// 将二进制数据转换为字符串
const decodedBody = body.toString(charset);
console.log(decodedBody);
});
解释
- encoding: null: 这个选项告诉
request
模块不要自动将响应体解码为字符串,而是将其作为二进制数据返回。 - 检查响应头中的 Content-Type: 通过解析响应头中的
Content-Type
字段,我们可以找到字符编码信息。 - 将二进制数据转换为字符串: 使用
toString
方法并指定正确的字符编码来解码二进制数据。
通过这种方式,你可以确保正确地处理从服务器接收到的数据,并避免乱码问题。希望这能帮助你解决问题!
设置gzip为true
var request = require('request');
request({url:'http://zhuanlan.zhihu.com/api/columns/bigertech/posts/19885746',gzip:true}, function (err,response,body) {
console.log(body);
});
还是我来回答把,楼上的我用了是不行的! 以后回答,请先自己测试
下面测试过可用:只是我换成了superagent
var request = require('superagent');
request
.get('http://zhuanlan.zhihu.com/api/columns/bigertech/posts/19885746')
.end(function(res){
console.log(res.body);
});
你可以把http的header打印出来看看返回的数据有没有经过gzip压缩,如果有压缩的话我得先解压缩。然后查看一下返回数据的编码, 在浏览器里直接访问返回数据好像是unicode编码,所以在接收到数据后最好使用birnary来接收,使用iconv转成utf8编码
我也碰到过这种情况,取出来的内容是乱码。乱码的原因的话编码问题造成的,有的网页是utf-8,有的是gb2312。 我处理这个问题思路是这样的:把希望取出来的内容通过buffer = new Buffer(content)存进去,了解网页的编码模式, 然后用iconv-lite进行decode转码 可以试一下~~
找到原因之后。通过 urlencode2
和 iconv-lite
肯定能解决乱码问题。
看这里争论的这么开心,最后楼主跑出来说,其实我想问的是学习挖掘技术哪家强?:D
看了诸位道友的回答受益颇多,自己也动手尝试并总结了下: 1 request中如果不手动设置gzip的话显示的的确是乱码,加gzip参数后显示的便是unicode,想要看中文的话还是需要用json去parse下的。 2 superagent自带parseJson方法,内部做过处理。 3 我装的chrome是原版无插件的,浏览器看出来的就是unicode代码。诚如楼主所说能看到中文是装过json自动转换工具的。 4 我是路过度劫的~~
乱码解决 主要是为了这个 模块的, zhihu_module
赞 11月16日