Node.js 将字符串从 ISO-8859-2 转换为 UTF-8

Node.js convert string from ISO-8859-2 to UTF-8

当我通过 Node.js Request 下载页面内容并且内容由 ISO-8859-2[= 编码时37=],无法转换成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。我通过元标记识别了 ISO-8859-2(chrome 浏览器也),我需要转换页面内容并保存到数据库。我的数据库是 UTF-8,因此我需要对其进行编码。

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

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

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

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

request({ uri: 'https://www.jakpsatweb.cz', encoding: null}, function(err, resp, body){
    .....
})