我正在使用Module: Request -- Simplified HTTP request method来抓取带有重音字符á é ó ú ê ã
等的网页。
我已经尝试encoding: utf-8
但没有成功。我仍然在结果中得到这个 字符。
request.get({
uri: url,
encoding: 'utf-8'
// ...
是否有任何配置可以修复它?
我不知道这是不是问题,但我filled one for this module。还没有答案。 :/
答案 0 :(得分:24)
由于不推荐二进制文件,使用iconv并正确处理解码似乎更好:
var request = require("request"), iconv = require('iconv-lite');
var requestOptions = { encoding: null, method: "GET", uri: "http://something.com"};
request(requestOptions, function(error, response, body) {
var utf8String = iconv.decode(new Buffer(body), "ISO-8859-1");
console.log(utf8String);
});
重要的是将HTTP请求的编码设置为空encoding: null
。
答案 1 :(得分:2)
将编码指定为utf8
而不是utf-8
。以下列出了the Node.js documentation缓冲区的可能编码。
ascii
- 仅适用于7位ASCII数据。这种编码方法非常快,如果设置将剥离高位。utf8
- Unicode字符。许多网页和其他文档格式使用UTF-8。base64
- Base64字符串编码。'binary
- 一种通过仅使用每个字符的前8位将原始二进制数据编码为字符串的方法。这种编码方法是折旧的,应尽可能避免使用Buffer对象。在将来的Node版本中将删除此编码。答案 2 :(得分:0)
我已经尝试过并且可以(Shift_JIS):
var concat = require('concat-stream'),
Iconv = require('iconv').Iconv,
request = require('request');
var conv = new Iconv('Shift_JIS', 'utf8'),
req = request('http://www.alc.co.jp/');
req.pipe(conv);
req.on('error', function() {
console.log('an error occurred');
});
conv.pipe(concat(function(body) {
console.log(body.toString());
}));
https://github.com/request/request/issues/1080#issuecomment-56172161
答案 3 :(得分:0)
不是对 OP 的直接回答,但我讨厌类似的问题并且可能会帮助某人。
我遇到了这个问题,因为有 gzip 压缩,所以需要先解压
var headers = {
'Accept-Encoding': 'gzip',
};
request({url:url, 'headers': headers, encoding:null},(e,r,b)=>{zlib.gunzip(b, (e,b)=>{console.log(b.toString())}) })