Python的“这个Unicode的最好的ASCII”数据库在哪里?

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

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

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

http://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/

在我最初的回答中,我也提出了unicodedata.normalize 。 但是,我决定testing一下,结果发现它不适用于Unicode引号。 它很好的翻译重音的Unicode字符,所以我猜unicodedata.normalize是使用unicode.decomposition函数实现的,这使我相信它可能只能处理一个字母和一个变音符号组合的Unicode字符,但是我并不是Unicode规范的专家,所以我可能只是充满了热气。

无论如何,你可以使用unicode.translate来处理标点符号。 translate方法将Unicode序号字典translate为Unicode序号,因此您可以创build一个映射,将仅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来处理这些字符。

有趣的问题。

Google帮我find了这个使用unicodedata模块描述的页面 ,如下所示:

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