解码html内容和htmlpar

2024-03-29 08:07:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个基于“HTMLParser”的子类来提取html内容。每当我有角色引用,比如

' ' '&'  '–' '…'

我想把它们换成英文版的

^{pr2}$

把一些简单的字符引用转换成正确的表示的最佳方法是什么?在

我的文本类似于:

Some text goes here&after that, 6:30 pm–8:45pm and maybe 
something like …

我想把这个转换成:

Some text goes here & after that, 6:30 pm-8:45pm and maybe 
something like ...

Tags: andtextthatheresomesomethinglikeamp
1条回答
网友
1楼 · 发布于 2024-03-29 08:07:36

你的问题有两部分。最简单的部分是解码HTML实体。最简单的方法是从HTMLParser模块中获取这个未记录但长时间稳定的方法:

>>> HTMLParser.HTMLParser().unescape('a < é – …')
u'a < é – …'

第二部分,将Unicode字符转换成ASCII外观,这是一个棘手的问题。我会尽量保留Unicode中的破折号“-”和类似的排版细节,而不是将它们转换成普通连字符和直引号之类的字符。除非您的应用程序根本无法处理非ASCII字符,否则您应该将它们与所有其他Unicode字符一起保持原样。在

U+2013省略号字符的具体情况可能会有所不同,因为它是一个“兼容性字符”,Unicode中只包含用于与其他编码进行无损往返的字符。最好只需键入三个点,然后让字体的字形组合逻辑精确地计算出如何绘制它。在

如果您只想替换兼容字符(比如这个字符、显式连字、日语全角数字和其他一些奇怪的字符),可以尝试将字符串规范化为正常形式KC:

^{pr2}$

(注意:您可能希望保留的其他字符也是兼容字符,包括“²”。)

下一步是将带有变音符号的字母转换成普通字母,这可以通过将其标准化为NFKD来实现,然后它们将所有具有“组合”字符类的字符从字符串中删除。这将给你一个简单的ASCII来表示以前的重音拉丁字母,尽管在某种程度上对许多语言来说并不正确。如果你只关心这些,你可以直接编码成ASCII码:

>>> unicodedata.normalize('NFKD', u'a < – …').encode('us-ascii', 'ignore')
'a < e  ...'

任何进一步的操作都必须是特别的,因为没有公认的标准可以将字符串向下折叠为ASCII。Windows有一个实现,Lucene(ascifoldingfilter)也是如此。结果变化莫测。在

相关问题 更多 >