节点js buffer.toString()编码问题

时间:2013-11-12 20:06:16

标签: node.js encoding buffer

我正在解析使用Windows-1250字符集的网站,过去3天我无法让我的页面以相同的编码显示数据。我的猜测是问题在于从缓冲区或缓冲区获取数据。 我尝试安装IConv模块,但是出现了一系列全新的问题,所以我想知道是否有办法在不使用iconv的情况下解决这个问题。

基本上,我从网站上获得“ANDRIJAŠEVCI”,在下面的代码之后我得到“ANDRIJA?EVCI”

    var options2 = {
        host: 'vred.hzinfra.hr',
        path: '/hzinfo/default.asp?Category=hzinfo&Service=vred3',
        headers: {"Accept-Charset": "Windows-1250,utf-8;ISO-8859-3,utf-8;ISO-8859-2,utf-8", "Content-Type": "text/html; charset=ISO-8859-2" }
    }

    var request2 = http.request(options2, function (res){
        var data = new Buffer(0,'utf-8');
        res.on('data', function (chunk) {
            data = Buffer.concat([data,chunk]);
        });
        res.on('end', function () {
            console.log(data.toString('utf-8'));
        });
    });
    request2.end();

1 个答案:

答案 0 :(得分:2)

您的代码中存在多个问题。

  1. 它是utf8,而不是Node.js中的utf-8,因此无法正常工作。
  2. 网站返回Windows-1250,但您将其作为utf-8处理。这也行不通。
  3. Node.js不支持Windows-1250编码,所以无论你做什么,这都不能使用纯Node.js(除了你要转换原始字节,但我不建议出于显而易见的原因)。
  4. 所以,简而言之:如果没有额外的图书馆,你想要的是(几乎不可能)。基本上,你已经找到了前进的方法(iconv),但你写道还有其他一些问题。由于你没有说出这些问题是什么,我只能给你一个非常通用的建议,你的代码应该看起来像这样:

    converter = new iconv.Iconv('windows-1250', 'utf8');
    data = converter.convert(data).toString();
    

    希望这会有所帮助......