7

我正在尝试使用请求模块访问非 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,我也看到了乱码的日文文本。

4

1 回答 1

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转换为另一种BufferUTF-8 编码。
  3. 现在这Buffer对于转换为字符串很有用。

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

于 2015-04-03T08:59:20.540 回答