是否可以非utf8编码阅读网页?例如windows-1251。 我尝试使用node-iconv转换结果:
var convertedBody = new Iconv('windows-1251','utf-8').convert(responseBody));
但我得到例外:
Error: EILSEQ, Illegal character sequence.
at IncomingMessage.<anonymous> (/root/nodejstest/test2.js:22:19)
at IncomingMessage.emit (events.js:59:20)
at HTTPParser.onMessageComplete (http.js:111:23)
at Socket.ondata (http.js:1183:22)
at Socket._onReadable (net.js:654:27)
at IOWatcher.onReadable [as callback] (net.js:156:10)
谢谢!
答案 0 :(得分:6)
这是解决您问题的方法。您必须先使用Buffer并将字符串转换为二进制文件。
request({
uri: website_url,
method: 'GET',
encoding: 'binary'
}, function (error, response, body) {
body = new Buffer(body, 'binary');
conv = new iconv.Iconv('windows-1251', 'utf8');
body = conv.convert(body).toString();
}
});
答案 1 :(得分:3)
查看iconv-lite库。 使用它,您的代码可能如下所示:
var iconv = require('iconv-lite');
request(
{
uri: website_url,
method: 'GET',
encoding: 'binary'
},
function(err, resp, body){
body = iconv.decode(body, 'win1251');
}
);
答案 2 :(得分:2)
Iconv 没有windows-1251
。
您可以从bnoordhuis/node-iconv验证编码列表。
BTW,来自维基百科:
Windows-1251和KOI8-R(或其乌克兰版本KOI8-U)比 ISO 8859-5 更常用。
答案 3 :(得分:0)
const request = require('request');
const iconv = require('iconv-lite');
request({
url: 'http://meta.ua',
encoding: 'binary',
}, (err,res,body) => {
if (err) throw err;
var decoded = iconv.decode(res.body, 'win1251');
console.log(decoded);
});