node html 中文乱码,node.js中抓取utf-8编码的网页为什么也是乱码

这个不是编码的问题,编码确实是utf-8,但是这个网页使用gzip进行了压缩,所以请求之后需要先进行ungzip。

推荐使用request,可以比较方便的解决这个问题,只需要添加一个参数:

var request = require('request');

request({

url: 'http://www.runoob.com/nodejs/nodejs-tutorial.html',

gzip: true

}, function(err, response, body) {

console.log(body);

});

补充一下不用第三方包的写法:

var http = require("http");

var zlib = require('zlib');

http.get("http://www.runoob.com/nodejs/nodejs-tutorial.html", function(res) {

var html = [];

res.on("data", function(data) {

html.push(data);

})

res.on("end", function() {

var buffer = Buffer.concat(html);

zlib.gunzip(buffer, function(err, decoded) {

console.log(decoded.toString());

})

}).on("error", function() {

console.log("获取失败")

})

})

数据是gzip压缩后的数据,所以建议不要直接使用字符串拼接,而是采用Buffer的concat方法。之后使用自带的zlib进行gunzip即可。

这个写法只是针对这一个问题而已,实际应用中需要自己去判断返回内容的encoding。当然了,第三方的工具,比如request和楼下的superAgent会更加方便一些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值