将十六进制字符(连字号)转换为UTF-8字符

9

我有一段文本内容,是从PDF文件转换而来的。在文本中有一些不需要的字符,我希望将它们转换为UTF-8字符。

例如,“Artificial Immune System”被转换为“Articial Immune System”。 被转换为一个字符,我使用了 gdex 来学习该字符的 ascii 值,但我不知道如何在所有内容中替换为实际值。

1个回答

17

我猜你看到的是连字体 - 专业的字体有一些字符组合成单个(更好看的)字形的字形。所以,字体不再用两个字形"f"和"i"来呈现,而是使用一个单独的"fi"字形。将“fi”(两个字母)与“fi”(单个字形)进行比较。

在Python中,您可以使用unicodedata模块来处理 Unicode 文本。您还可以利用转换为NFKD标准形式来拆分连字体:

>>> import unicodedata
>>> unicodedata.name(u'\uFB01')
'LATIN SMALL LIGATURE FI'
>>> unicodedata.normalize("NFKD", u'Arti\uFB01cial Immune System')
u'Artificial Immune System'

因此,使用NFKD对字符串进行规范化应该会有所帮助。如果您发现这样分裂太多,则我的最佳建议是制作一个小的映射表,用于拆分您想要拆分的连字号并手动替换它们:

>>> ligatures = {0xFB00: u'ff', 0xFB01: u'fi'}
>>> u'Arti\uFB01cial Immune System'.translate(ligatures)
u'Artificial Immune System'

请参考维基百科文章,获取在Unicode中的连字列表


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接