首页 > 解决方案 > 越南语抓取的字符不像在网络上那样显示

问题描述

我正在从网上抓取一些阅读内容并将它们保存为 utf8 txt:

  const result = await page.evaluate(() => {
    const title = document.querySelector('#chapter-title').innerText;
    const content = document.querySelector('#chapter-content').innerText;
    return title + "\n\n" + content
  })

  fs.writeFileSync(`./results/chapter${chapter}.txt`, `${result}`, 'utf8');

但是原始 (HTML) 形式中的某些字符(主要是重音符号)与它们在浏览器上显示的不同,并且弄乱了我的阅读应用程序。

以下是相同文本的截图:第一行是爬取的结果,第二行是用浏览器打开页面并选择+手动复制文本:

在此处输入图像描述

浏览器似乎以某种方式智能地“修复”了这些文本并更改为字体中可用的字符。

由于我不确切知道发生了什么,我的搜索无法产生任何结果。

发生了什么,无论如何我可以将抓取的文本格式化为可读的形式吗?

标签: node.jsutf-8web-crawlertext-processing

解决方案


我已经使用String.Prototype.Normalize()解决了这个问题。

源 HTML 中的字符混合了 NFC 和 NFD 形式。似乎我的文本编辑器未能将字符与 2 个或更多重音组合在一起,从而导致单独的重音/正方形。使用 normalize() 将它们全部归一化为 NFC,解决了这个问题。

(2天内无法接受自我回答的问题,请随意详细说明或添加您认为合适的问题的参考/评论)


推荐阅读