2012-02-07 97 views
3

我有一個文本內容從pdf文件轉換而來。文本中有一些不需要的字符,我想將它們轉換爲utf-8字符。將十六進制字符(連字)轉換爲utf-8字符

例如; '人工免疫系統'轉換爲'Arti fi cial免疫系統'。 fi被轉換爲一個字符,我使用gdex來了解字符的ascii值,但我不知道如何用所有內容中的實際值替換它。

回答

5

我猜你看到的是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

相關問題