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

7

我正在尝试使用request模块访问一个非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
我认为您可以使用https://github.com/ashtuchkin/iconv-lite将SHIFT_JIS缓冲区解码为UTF-8字符串。 - Jerry
在这里找到了另一个Node的解决方案。我将尝试将其制作成Meteor包。https://github.com/polygonplanet/encoding.js - ChatGPT
那看起来也不错,@Jerry。 - ChatGPT
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 进行转换,转换成另一个 UTF-8 编码的 Buffer
  3. 现在,这个 Buffer 已经可以被转换成字符串了。

(顺带一提,http://www.alc.co.jp 已经改用 UTF-8,所以我用了另外一个网站来代替它。)


谢谢Alan!这应该会帮助一些人。干杯! - ChatGPT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接