【发布时间】:2011-05-08 22:28:03
【问题描述】:
你好
我从包含特殊字符(例如 u"ıöüç")的外部来源检索基于文本的 utf8 数据,而我想将它们标准化为英语,例如 "ıöüç" -> "iouc" 。实现这一目标的最佳方法是什么?
【问题讨论】:
-
搜索和替换也许,你必须有一个完整的特殊字符数组。
标签: python django utf-8 diacritics transliteration
你好
我从包含特殊字符(例如 u"ıöüç")的外部来源检索基于文本的 utf8 数据,而我想将它们标准化为英语,例如 "ıöüç" -> "iouc" 。实现这一目标的最佳方法是什么?
【问题讨论】:
标签: python django utf-8 diacritics transliteration
import unicodedata
unicodedata.normalize()
【讨论】:
transliteration。
我推荐使用Unidecode module:
>>> from unidecode import unidecode
>>> unidecode(u'ıöüç')
'iouc'
注意你如何给它一个 unicode 字符串并输出一个字节字符串。输出保证为ASCII。
【讨论】:
这完全取决于您想在音译结果方面走多远。如果您想将所有内容一直转换为 ASCII(αβγ 到 abg),那么 unidecode 是最好的选择。
如果您只想从重音字母中删除重音,那么您可以尝试使用规范化形式 NFKD 分解您的字符串(这会将重音字母 á 转换为普通字母 a 后跟 U+0301 COMBINING ACUTE ACCENT),然后丢弃重音符号(属于 Unicode character class Mn — "Mark, nonspacing")。
import unicodedata
def remove_nonspacing_marks(s):
"Decompose the unicode string s and remove non-spacing marks."
return ''.join(c for c in unicodedata.normalize('NFKD', s)
if unicodedata.category(c) != 'Mn')
【讨论】:
我找到的最简单的方法:
unicodedata.normalize('NFKD', s).encode("ascii", "ignore")
【讨论】: