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

use*_*817 7 javascript encoding request shift-jis node.js

我正在尝试使用请求模块访问非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.
  }
});
Run Code Online (Sandbox Code Playgroud)

即使在将编码选项设置为Shift_JIS之后,我也看到了乱码的日文文本.

Ala*_*Tam 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.
      }
    });
Run Code Online (Sandbox Code Playgroud)
  1. encoding: null参数要求request不将Buffer(一个字节数组)转换为String.
  2. 我们传递此缓冲区以Iconv转换为另一种BufferUTF-8编码.
  3. 现在这Buffer很适合转换成String.

(BTW,http://www.alc.co.jp已切换到UTF-8,所以我用另一个网站替换.)