Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用node.js从windows-1250编码的网页获取正确的字符串_Javascript_Node.js_Character Encoding - Fatal编程技术网

Javascript 使用node.js从windows-1250编码的网页获取正确的字符串

Javascript 使用node.js从windows-1250编码的网页获取正确的字符串,javascript,node.js,character-encoding,Javascript,Node.js,Character Encoding,我正试图用nodejs从一个数据库中获取一些数据,但是我在字符编码方面遇到了问题。 该网页声明其编码为: 当我用chrome浏览器浏览时,它将编码设置为windows-1250,一切看起来都很好 由于node中没有针对流的windows-1250编码/解码(utf8不起作用),我发现了一个iconv lite包,它应该能够轻松地在不同的编码之间转换。但在将响应保存到文件(或输出到控制台)后,仍然会出现错误字符。我还尝试了不同的编码,本机节点缓冲区编码,将头设置为与我在chrome中看到的相同(

我正试图用nodejs从一个数据库中获取一些数据,但是我在字符编码方面遇到了问题。 该网页声明其编码为:
当我用chrome浏览器浏览时,它将编码设置为windows-1250,一切看起来都很好

由于node中没有针对流的windows-1250编码/解码(utf8不起作用),我发现了一个iconv lite包,它应该能够轻松地在不同的编码之间转换。但在将响应保存到文件(或输出到控制台)后,仍然会出现错误字符。我还尝试了不同的编码,本机节点缓冲区编码,将头设置为与我在chrome中看到的相同(
Accept Charset':“ISO-8859-1,utf-8;q=0.7,*;q=0.3
),但似乎没有任何功能正常工作

您可以在这里看到整个代码

我想我遗漏了一些关于编码工作原理的基本信息,因此,如果您能帮助我们获取具有正确字符的数据,我们将不胜感激

编辑:
还尝试了节点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');

我认为,您正在转换字符串,但必须转换原始字节! 如果(您正在从web读取某些内容,则必须将其作为二进制文件读取)

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


您好,我也看了一遍代码,似乎编码是按同义词组织的,所以1250==win1250==windows1250。不管怎样,我试过了,结果也一样。win1251也不工作,结果不同,但非ASCII字符仍然杂乱无章。
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();