Ajax请求汉字返回“?”

时间:2019-01-11 03:43:14

标签: jquery node.js character-encoding

我使用nodejs运行一个抓取网站以获取文章,我想使用XMLHttpRequest加载中文网站,而该网站正在使用此meta

<meta http-equiv="Content-Type" content="text/html; charset=gbk" />

并且我的网站使用了字符集UTF-8

xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.setRequestHeader('Content-Type','text/html; charset=gbk');
xhr.onreadystatechange = function () {
//DOM Processing
    $=cheerio.load(xhr.responseText);
};
xhr.send();

有人知道我必须为标题设置什么吗?我尝试了charset gbk / GB2312也没有用。任何帮助都会很棒。 谢谢

1 个答案:

答案 0 :(得分:1)

我认为您正在使用:https://github.com/driverdan/node-XMLHttpRequest

在“已知问题/功能缺失”中: 对于非UTF8文件,本地文件访问可能会产生意外结果

所以我认为这不能通过node-XMLHttpRequest来解决。

这是我使用gbk抓取网站的解决方案,希望这对您有用。

const rp = require('request-promise')
const cheerio = require('cheerio')
const iconv = require('iconv-lite')

const options = {
    url: `http://www.duchang.org/`,
    transform: function (body) {
        let html = iconv.decode(body, 'gbk')
        return cheerio.load(html)
    },
    encoding: null
}
rp(options)
    .then(($) => {
        // 首页头条
        console.log($)
    })
    .catch(function (err) {
        throw Error(err)
    })