Node.js mikeal / request module - 乱码非utf8网站(Shift_JIS)

时间:2014-09-02 12:25:57

标签: javascript node.js encoding request shift-jis

我正在尝试使用请求模块访问非utf-8网站。对此请求的响应是乱码。

var request = require('request');
request('http://www.alc.co.jp/', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body) // Print the web page.
  }
});

即使将编码选项设置为Shift_JIS,我也会看到乱码的日文文本。

1 个答案:

答案 0 :(得分:6)

您需要自己进行转换。下面的示例代码使用node-iconv。

    var Iconv = require('iconv').Iconv;
    var request = require('request');
    request({
      uri: 'http://www.jalan.net/',
      encoding: null,
    }, function (error, response, body) {
      if (!error && response.statusCode == 200) {
        body = new Iconv('shift_jis', 'utf-8').convert(body).toString();
        console.log(body); // Print the web page.
      }
    });
  1. encoding: null参数要求request不要将Buffer(字节数组)转换为String
  2. 我们将此缓冲区传递给Iconv,以便转换为另一种Buffer UTF-8编码。
  3. 现在这个Buffer很适合转换为String。
  4. (BTW,http://www.alc.co.jp已切换为UTF-8,因此我用其他网站替换。)