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

Bar*_*s26 6 python pdf character ligature

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

例如; "人工免疫系统"转换像"ARTI 音响官方免疫系统".fi像一个字符一样转换,我曾经gdex学过ascii字符的价值,但我不知道如何用所有内容中的实际值替换它.

Mar*_*ler 9

我猜你所看到的是连字 - 专业字体有glyps,它将几个单独的字符组合成一个(更好看的)字形.因此,不是将"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'
Run Code Online (Sandbox Code Playgroud)

因此,使用NFKD对字符串进行规范化可以帮助您.如果你发现这个分裂太多,那么我最好的建议是制作一个你要拆分的连字的小型映射表,并手动替换连字:

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

请参阅Wikipedia文章以获取Unicode中的连字列表.