2

我正在解析一个使用 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();
4

1 回答 1

2

您的代码中有几个问题。

  1. utf8不在utf-8Node.js 中,因此它无法工作。
  2. 该网站返回Windows-1250,但您将其处理为utf-8. 这也行不通。
  3. Node.js 不支持Windows-1250编码,因此无论您做什么,这都无法使用纯 Node.js 工作(除非您要转换原始字节,但出于明显的原因我不建议这样做)。

所以,长话短说:如果没有额外的库,你想要的(几乎)是不可能的。基本上,您已经找到了解决方法(iconv),但是您写道还有一些额外的问题。由于你没有说这些问题是什么,我只能给你一个非常笼统的建议,你的代码应该看起来像这样:

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

希望这会有所帮助……</p>

于 2013-11-12T20:23:43.383 回答