Python与字符标准化
你好!我从一个外部来源获取了基于文本的utf8数据,这些数据里有一些特殊字符,比如 u"ıöüç"
。我想把这些字符转换成英文的形式,比如把 "ıöüç"
转换成 "iouc"
。请问有什么好的方法可以做到这一点呢?
4 个回答
2
我找到的最简单的方法是:
unicodedata.normalize('NFKD', s).encode("ascii", "ignore")
7
这完全取决于你想把结果转换到什么程度。如果你想把所有内容都转换成ASCII格式(比如把 αβγ
转换成 abg
),那么 unidecode
是个不错的选择。
如果你只是想去掉带重音的字母上的重音符号,那么你可以尝试用一种叫做NFKD的标准化形式来处理你的字符串(这会把带重音的字母 á
转换成普通字母 a
,后面跟着 U+0301 COMBINING ACUTE ACCENT
),然后再把这些重音符号去掉(这些符号属于 Unicode字符类别 Mn
— "标记,非间距")。
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')
43
我推荐使用Unidecode模块:
>>> from unidecode import unidecode
>>> unidecode(u'ıöüç')
'iouc'
注意,你给它输入一个unicode字符串,它会输出一个字节字符串。输出的内容保证是ASCII格式的。