使用node.js从windows-1250编码的网页获取正确的string

我试图从网页上刮取一些数据,但是我遇到了字符编码的问题。 该网页指出,它的编码是: <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">当我用铬浏览它设置编码为Windows-1250和一切看起来不错。

由于没有Windows-1250编码/解码节点stream(和utf8没有工作),我发现了一个iconv-lite包应该能够很容易地在不同的编码之间转换。 但是,我将响应保存到文件(或输出到控制台)后,仍然收到错误的字符。 我也尝试了不同的编码,本地节点缓冲区编码,设置标题与我在chrome中看到的相同( Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3 )没有什么似乎正常工作。

你可以在这里看到整个代码https://gist.github.com/4110999 。

我想我缺less关于编码如何工作的一些根本性的东西,所以任何帮助如何获得正确的字符的数据将不胜感激。

编辑:
如果是软件包问题,还尝试了node-iconv软件包。 将第51行更改为:

 var decoder = new Iconv_native('WINDOWS-1250', 'UTF-8'); var decoded = decoder.convert(body).toString(); 

但仍然得到相同的结果。

我不熟悉iconv-lite软件包,但仔细查看代码,看起来您需要使用win1250而不是windows1250 (请参见此处 )

编码被视为一个散列 。

此外,自述文件使用此代码而不是“windows1251”:

 str = iconv.decode(buf, 'win1251'); 

我想,你正在转换string,但你必须转换一个原始字节 ! 如果(你正在从网上读东西,你必须把它看作二进制文件)

从磁盘读取win-1250中的文件示例:

 var Buffer = require('buffer').Buffer; var Iconv = require('iconv').Iconv; //without options (encoding is not specified), 'fs' reads as raw bytes. var bytes= fs.readFileSync('myFile.txt'); //this is bad: var myBadString = fs.readFileSync('myFile.txt', { encoding: "UTF-8" }); var buf = new Buffer(bytes, 'binary'); var translated = new Iconv('CP1250', 'UTF8').convert(buf).toString();