我正在从网上抓取一些阅读资料,并将其另存为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)的字符(大多数是重音符号)与它们在浏览器中显示的字符不同,并且弄乱了我的阅读应用程序。
以下是相同文本的屏幕截图:第一行是爬网的结果,第二行是通过使用浏览器打开页面并手动选择+复制文本:
似乎浏览器以某种方式智能地“固定”了这些文本并变成了字体中可用的字符。
由于我不知道到底发生了什么,所以我的搜索无法产生任何结果。
发生了什么,无论如何,我可以将抓取的文本格式化为可读形式吗?
答案 0 :(得分:1)
我已使用String.Prototype.Normalize()解决了该问题。
源HTML中的字符是NFC和NFD的混合形式。看来我的文字编辑器无法将两个或两个以上带有重音符号的字符组合在一起,导致出现了单独的重音符号/正方形。使用normalize(),将它们全部标准化为NFC,即可解决问题。
(在2天之内不能接受自我回答的问题,请根据需要随意阐述或添加有关此问题的参考/评论)