模块请求如何正确检索重音字符?

时间:2011-11-30 20:25:40

标签: node.js request web-scraping

我正在使用Module: Request -- Simplified HTTP request method来抓取带有重音字符á é ó ú ê ã等的网页。

我已经尝试encoding: utf-8但没有成功。我仍然在结果中得到这个 字符。

request.get({
    uri: url,
    encoding: 'utf-8'
    // ...

是否有任何配置可以修复它?

我不知道这是不是问题,但我filled one for this module。还没有答案。 :/

4 个答案:

答案 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())}) })