首页 > 解决方案 > 将 unicode 小写大写字母转换为其 ASCII 等价物

问题描述

我有以下数据集

'Fʀɪᴇɴᴅ',
 'ᴍᴏᴍ',
 'ᴍᴀᴋᴇs',
 'ʜᴏᴜʀʟʏ',
 'ᴛʜᴇ',
 'ᴄᴏᴍᴘᴜᴛᴇʀ',
 'ʙᴇᴇɴ',
 'ᴏᴜᴛ',
 'ᴀ',
 'ᴊᴏʙ',
 'ғᴏʀ',
 'ᴍᴏɴᴛʜs',
 'ʙᴜᴛ',
 'ʟᴀsᴛ',
 'ᴍᴏɴᴛʜ',
 'ʜᴇʀ',
 'ᴄʜᴇᴄᴋ',
 'ᴊᴜsᴛ',
 'ᴡᴏʀᴋɪɴɢ',
 'ғᴇᴡ',
 'ʜᴏᴜʀs',
 'sᴏᴜʀᴄᴇ',

然后我想使用 Python 脚本转换成 ASCII 格式,例如:

Fʀɪᴇɴᴅ - FRIEND
ᴍᴏᴍ - MOM

我尝试过编码解码,但这不起作用我也尝试过这个解决方案。但这并不能解决我的问题。

标签: pythonunicodeasciipython-unicode

解决方案


Python 没有提供直接将小型大写字符转换为其 ASCII 等价物的方法。但是,可以使用str.translate来做到这一点。

要使用str.translate,我们需要创建小型大写字符的序数值到 ASCII 字符的映射。

要获取序数值,我们可以构造每个字符的名称,然后从unicodedata数据库中获取该字符并对其调用ord。请注意,没有小型大写字母“X”字符,并且在 3.7 之前的 Python 版本中不存在小型大写字母“Q”。

>>> from string import ascii_uppercase
>>> import unicodedata as ud

>>> # Filter out unsupported characters
>>> # Python < 3.7
>>> letters = (x for x in ascii_uppercase if x not in ('Q', 'X'))
>>> # Python >= 3.7
>>> letters = (x for x in ascii_uppercase if x != 'X') 

>>> mapping = {ord(ud.lookup('LATIN LETTER SMALL CAPITAL ' + x)): x for x in letters}

一旦我们有了映射,我们就可以使用它为 制作一个转换表str.translate,使用str.maketrans,然后执行转换。

>>> # Make as translation table
>>> tt = str.maketrans(mapping)
>>> # Use the table to "translate" strings to their ASCII equivalent.
>>> s = 'ᴍᴏɴᴛʜ'
>>> s.translate(tt)
'MONTH'

推荐阅读