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

时间:2012-02-07 11:01:56

标签: python pdf character ligature

我有一个从pdf文件转换的文本内容。文本中有一些不需要的字符,我想将它们转换为utf-8字符。

例如; “人工免疫系统”的转换就像'Arti fi cial Immune System'。 fi 转换为一个字符,我使用gdex来学习字符的ascii值,但我不知道如何将其替换为真实值。所有内容。

1 个答案:

答案 0 :(得分:9)

我猜你所看到的是ligatures - 专业字体有glyps,它将几个单独的字符组合成一个(更好看的)字形。因此,不是将“f”和“i”写为两个字形,而是字体具有单个“fi”字形。将“fi”(两个字母)与“fi”(单个字形)进行比较。

在Python中,您可以使用unicodedata module来操纵晚期的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'

请参阅Wikipedia article获取list of ligatures in Unicode