我有一些使用Unicode标点符号的文本,如左双引号,右引号为撇号,等等,我需要用ASCII格式。 Python是否有一个具有明显ASCII替代品的这些字符的数据库,所以我可以做得比将它们全部变成“?”更好。 ?

有帮助吗?

解决方案

Unidecode 看起来像一个完整的解决方案。它将花哨的引号转换为ascii引号,将重音拉丁字符转换为无重音,甚至尝试音译来处理不具有ASCII等效字符的字符。这样你的用户不必看到一堆?当你必须通过传统的7位ascii系统传递文本时。

>>> from unidecode import unidecode
>>> print unidecode(u"\u5317\u4EB0")
Bei Jing 

http://www.tablix.org/~avian /博客/存档/ 2009/01 / unicode_transliteration_in_python /

其他提示

在我的原始答案中,我还建议 unicodedata.normalize 。但是,我决定测试它,结果证明它不适用于Unicode引号。它在翻译带重音的Unicode字符方面做得很好,所以我猜测 unicodedata.normalize 是使用 unicode.decomposition 函数实现的,这让我相信它可能只能处理字母和变音符号组合的Unicode字符,但我不是Unicode规范的专家,所以我可能只是充满热气......

无论如何,您可以使用 unicode.translate 来处理标点字符。 translate 方法将Unicode序列的字典带到Unicode序列,因此您可以创建一个映射,将仅Unicode标点符号转换为ASCII兼容的标点符号:

'Maps left and right single and double quotation marks'
'into ASCII single and double quotation marks'
>>> punctuation = { 0x2018:0x27, 0x2019:0x27, 0x201C:0x22, 0x201D:0x22 }
>>> teststring = u'\u201Chello, world!\u201D'
>>> teststring.translate(punctuation).encode('ascii', 'ignore')
'"hello, world!"'

如果需要,您可以添加更多标点符号映射,但我认为您不必担心处理每个Unicode标点字符。如果你需要处理重音和其他变音符号,你仍然可以使用 unicodedata.normalize 来处理这些字符。

有趣的问题。

谷歌帮我找到了这个页面,其中使用了 unicodedata module 如下:

import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')

有关此内容的更多讨论,请访问 http://code.activestate.com/recipes/251871/ 具有NFKD解决方案和一些转换表的方法,适用于± => +/-和其他非字母字符。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top