nodejs的request请求网站代码,获取到的数据为什么是乱码?

如下代码,获取 gsying1474-1.icoc.cc 中的代码,就是乱码,而其他网页获取到的就是正常的

var http=require("http");
var req=http.get({
    hostname: 'gsying1474-1.icoc.cc',
    port: 80,
    path: '/',
    method: 'GET',
    headers:{
        'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
    }
},function(res){
    var html = '';
    // res.setEncoding('utf-8');
    

    res.on('data',function(chunk){
        html += chunk;
    });
    res.on('end',function(){
        //解析html
        console.log(html);
    });
});```### 问题描述


### 问题出现的环境背景及自己尝试过哪些方法


### 相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)


### 你期待的结果是什么?实际看到的错误信息又是什么?
阅读 4.4k
2 个回答

这个连带英文字母都是乱码,应该是 gzip 的问题吧.

打印了一下 res.headers, 输出是这样的:

{ 'content-type': 'text/html; charset=UTF-8',
  'transfer-encoding': 'chunked',
  connection: 'close',
  'fai-w-flow': '2022057058',
  'fai-w-aid': '4625551',
  date: 'Mon, 08 Apr 2019 01:32:42 GMT',
  'cache-flow': '4325380074',
  'content-encoding': 'gzip',
  'fai-cache-status': 'NO_CACHE',
  'vps-cache': 'no',
  p3p: 'CP=CAO PSA OUR',
  server: 'nginx' }

可以看到, content-encoding 为 gzip,所得到的数据是经过gzip压缩过的.所以乱码.
至于解决办法....一般是用第三方包请求吧,像request,superagent 之类的包,都能设置 gzip:true,帮你解决这些问题

这个网站编码的问题,不是utf-8,可能是gb2312之类,需要转码

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题