0

当我通过 Node.js请求下载页面内容并且内容由ISO-8859-2编码时,无法将其转换为UTF-8

我正在使用node-iconv

代码:

request('https://www.jakpsatweb.cz', function(err, resp, body){
    const title = regexToRetrieveTitle(body);
    const iconv = new Iconv('ISO-8859-2', 'UTF-8');
    const buffer = iconv.convert(title);
    console.log(buffer);
    console.log(buffer.toString('UTF8'));
})

安慰:

<Buffer 52 65 6b 6c 61 6d 61 3a 20 6a 61 6b 20 66 75 6e 67 75 6a 65 20 77 65 62 6f 76 c4 8f c5 bc cb 9d 20 72 65 6b 6c 61 6d 61>
Reklama: jak funguje webovďż˝ reklama

预期结果:

Reklama: jak funguje webová reklama

有谁知道问题出在哪里?

编辑:

例如,我下载THIS PAGE。我通过元标记(chrome 浏览器)识别了 ISO-8859-2,我需要转换页面内容并保存到数据库。我的数据库是 UTF-8,因此我需要对其进行编码。

4

2 回答 2

2

问题出在 Node.js 请求中。默认情况下,编码设置为 UTF8。我不得不将它设置为null,现在一切正常。

request({ uri: 'https://www.jakpsatweb.cz', encoding: null}, function(err, resp, body){
    .....
})
于 2016-10-19T16:01:30.073 回答
1

从 ISO-8859-2 到 UTF-8 的转换工作正常。输入(标题变量)的内容有误:标题包含字节 EF BF BD。这意味着标题已经是 UTF-8 编码的,但是在您期望字母 á(带有 ACUTE 的拉丁小写字母 A)的地方有一个 U+FFFD(替换字符)。

现在,原始网页https://www.jakpsatweb.cz/reklama/index.html已在 ISO-8859-2 中正确编码,并且在该部分中也具有所需的字符集声明<head>

因此问题一定出在下载网页的软件(NodeJS)或 regexToRetrieveTitle 函数上。

于 2016-10-19T15:59:34.260 回答