Node.js mikeal /请求模块 – 乱码非utf8网站(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之后,我也看到了乱码的日文文本。

你需要自己做转换。 下面的示例代码使用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以转换成另一个UTF-8编码的Buffer
  3. 现在这个Buffer很适合被转换成string。

(顺便说一句, http://www.alc.co.jp已经切换到UTF-8,所以我用另一个网站replace。)