node.js - 越南语抓取的字符不像在网络上那样显示
问题描述
我正在从网上抓取一些阅读内容并将它们保存为 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) 形式中的某些字符(主要是重音符号)与它们在浏览器上显示的不同,并且弄乱了我的阅读应用程序。
以下是相同文本的截图:第一行是爬取的结果,第二行是用浏览器打开页面并选择+手动复制文本:
浏览器似乎以某种方式智能地“修复”了这些文本并更改为字体中可用的字符。
由于我不确切知道发生了什么,我的搜索无法产生任何结果。
发生了什么,无论如何我可以将抓取的文本格式化为可读的形式吗?
解决方案
我已经使用String.Prototype.Normalize()解决了这个问题。
源 HTML 中的字符混合了 NFC 和 NFD 形式。似乎我的文本编辑器未能将字符与 2 个或更多重音组合在一起,从而导致单独的重音/正方形。使用 normalize() 将它们全部归一化为 NFC,解决了这个问题。
(2天内无法接受自我回答的问题,请随意详细说明或添加您认为合适的问题的参考/评论)
推荐阅读
- html - 如何将其保留在其他动画下并防止动画中断其他标签的动画?
- javascript - 如果尝试使用 getElementByClassName 获取元素,为什么 ChildNode 属性不起作用
- xtext - 困惑如何用 xbase 支持数组
- python - 如何从多个序列创建转换表?
- graph - 根据父节点和双向关系获取节点
- amazon-web-services - Alexa 开发人员控制台 - DynamoDB
- jspdf - html2canvas 和 jspdf 不呈现 .svg 图像
- r - 基于其他列创建新列的 data.table 方式
- c++ - 如何使用opencv的局部阈值对图像进行二值化
- sql - 如何在 SQL Server 中删除具有 Not Null 约束的现有列