将任意 unicode 字母数字字符映射到它们的 ascii 等价物

Mapping arbitrary unicode alphanumeric characters to their ascii equivalents

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

x='€'

将呈现为

x='Patriot'

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

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'