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

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

本文关键字:转换 UTF-8 ISO-8859-2 js 字符串 Node      更新时间:2023-09-26

当我通过Node.js Request下载页面内容时,内容是由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
有谁知道问题在哪里吗?

编辑:

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

问题在Node.js请求中。编码默认设置为UTF8。我必须将其设置为null,现在一切都很好。

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

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

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

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