首页 > 解决方案 > 将任意 unicode 字母数字字符映射到它们的 ascii 等价物

问题描述

当我遇到任意 unicode 字符串时,例如在主题标签中,我只想在其 ascii 等价物的字符串中表达其字母数字组件。例如,

x='€'

将呈现为

x='Patriot'

由于我无法预料此类字符串中可能出现的 unicode,因此我希望该方法尽可能通用。有什么建议么?

标签: unicodemappingascii

解决方案


unicodedata.normalize方法可以将 Unicode 代码点转换为规范值。然后,通过ascii编码运行该值,忽略字节字符串的非 ASCII 值,然后通过ascii解码再次获取 Unicode 字符串:

>>> x='€'
>>> ud.normalize('NFKC',x).encode('ascii',errors='ignore').decode('ascii')
'Patriot'

如果您需要从字母中删除重音符号,但仍保留基本字母,请'NFKD'改用。

>>> x='€ô'
>>> ud.normalize('NFKD',x).encode('ascii',errors='ignore').decode('ascii')
'Patriot'

推荐阅读