如果你使用nodejs的request来读取网页内容的时候,如果网页内容的字符编码格式是gb2312或者gbk,那么返回的body内容中中文将会显示成乱码,因为JS内部的字符编码是用的Unicode来表示的,所以需要将内容转换为utf-8编码。

const request = require('request');

request(url, function(error, res, body) {
    if (!error && res.statusCode == 200) {
        console.log(body);
       }
});

此时输出的body中如果有中文的话将会显示成乱码

这是我们需要引入一个iconv-lite模块

const request = require('request'),
    Iconv = require('iconv-lite');

request({
    encoding: null,
    url: url
}, function(error, res, body) {
    if (!error && res.statusCode == 200) {
        console.log(Iconv.decode(body, 'gb2312').toString());
    }
});

这里有一个地方要注意的,encoding: null 这句千万不要漏掉了,这句是表示在抓取网页时不要对接收到的数据做任何转换。


当然gbk的乱码问题也可以通过这种方式来解决
gbk还有一种方式可以通过gbk模块来进行编码转换