Python与字符标准化

22 投票
4 回答
13909 浏览
提问于 2025-04-16 06:58

你好!我从一个外部来源获取了基于文本的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格式的。

撰写回答