2017-04-12 81 views
0

有可能簡化而不丟失太多的ASCII一些Unicode字符。的Unicode轉換爲ASCII(如果可能)

實施例:

>>> unicodedata.name(u'-') 
'HYPHEN-MINUS' 

>>> unicodedata.name(u'−') 
'MINUS SIGN' 

在上述情況下,我更喜歡 「HYPHEN-MINUS」,因爲 「減號」 不是ASCII。

我可以很容易地寫我自己的翻譯,但我不喜歡重新發明輪子。

有沒有簡單的方法來翻譯特殊的Unicode字符爲簡單的ASCII字符?

我知道這是猜測,只適用於某些unicode字符,但在這種情況下沒關係。

+1

最簡單的方法:使用映射像你這樣,但不要重新發明輪子。改用[Unidecode](https://pypi.python.org/pypi/Unidecode)(是的,它將MINUS SIGN映射到HYPHEN-MINUS)。 –

回答

2

這可能不是完美的答案。 Unicode聯盟已經草案TR36來處理unicode中的字符相似性(不僅僅是ASCII)。

您可以搜索Python模塊,開發商作出映射他們最好的努力。類似於ascii字符和符號unicode字符can be found here的概念證明同形文字攻擊。 (由於字體問題,某些字符或符號可能會被瀏覽器顯示爲方框)

您可以使用這些python confusable homoglyphs包。該文檔顯示爲here

from confusable_homoglyphs import confusables 
confusables.is_confusable.is_confusable("-") 

結果

[{ '同形字':[{ 'C': ' - ', 'N': 'HYPHEN'},{ 'C': ' - ',「N ': 'NON-BREAKING HYPHEN'},{'c':' - ','n':'DASH'},{'c':' - ', 'n':'EN DASH'}, { 'C': '﹘', 'N': '小EM DASH'},{ 'C': '\ u200e \ u200e', 'N': '阿拉伯語句號'},{ 'C': '⁃','n':'HYPHEN BULLET'},{'c':'˗','n':'MODIFIER LETTER MINUS SIGN'},{'c':' - ', 'n': '減號'},{ 'C': '➖', 'N': 'HEAVY減號'},{ 'C': 'Ⲻ', 'N': '科普特大寫字母方言-P NI'}], '別名': '共同', '字符': ' - '}]

現在,你需要決定哪個是你最好重新映射。如果您想從庫中獲取一些概念,請查看源代碼。

+0

非常感謝您的回答。我以前並不知道「Homoglyph」這個詞。這和python包的鏈接有很大的幫助。順便說一句,我將它添加到我的列表「加入softwarerecs和stackoverflow」:https://github.com/guettli/join-stackoverflow-and-softwarerecs/blob/master/README。md – guettli

+0

根據你的觀點,這是不是「完美」的答案? – guettli

+0

@guettli因爲你要求一個現成的unicode ascii映射器。 Homoglphy-confusables作者將盡最大努力繪製大多數角色,需要持續的反饋和貢獻才能使其變得更好。 – mootmoot

相關問題