Python 和字符规范化
你好 我从外部源检索基于文本的 utf8 数据,其中包含特殊字符,例如 u"ıöüç"
,同时我想将它们规范化为英语,例如 "ıöüç"
-> “iouc”
。实现这一目标的最佳方法是什么?
Hello
I retrieve text based utf8 data from a foreign source which contains special chars such as u"ıöüç"
while I want to normalize them to English such as "ıöüç"
-> "iouc"
. What would be the best way to achieve this ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我建议使用 Unidecode 模块:
注意如何向其提供 unicode 字符串并输出字节字符串。保证输出为 ASCII。
I recommend using Unidecode module:
Note how you feed it a unicode string and it outputs a byte string. The output is guaranteed to be ASCII.
这完全取决于您想要对结果进行音译的程度。如果您想将所有内容全部转换为 ASCII(
αβγ
到abg
),那么unidecode
就是您的最佳选择。如果您只想删除重音字母中的重音,那么您可以尝试使用规范化形式 NFKD 分解字符串(这会将重音字母
á
转换为纯字母a
,然后是U+0301 组合尖锐重音
),然后丢弃重音(属于 Unicode 字符类Mn
—“标记,非空格”)。It all depends on how far you want to go in transliterating the result. If you want to convert everything all the way to ASCII (
αβγ
toabg
) thenunidecode
is the way to go.If you just want to remove accents from accented letters, then you could try decomposing your string using normalization form NFKD (this converts the accented letter
á
to a plain lettera
followed byU+0301 COMBINING ACUTE ACCENT
) and then discarding the accents (which belong to the Unicode character classMn
— "Mark, nonspacing").我发现的最简单的方法:
unicodedata.normalize('NFKD', s).encode("ascii", "ignore")
The simplest way I found:
unicodedata.normalize('NFKD', s).encode("ascii", "ignore")
http://docs.python.org/library/unicodedata.html
http://docs.python.org/library/unicodedata.html