【发布时间】:2020-04-08 22:10:23
【问题描述】:
我想知道如何转换“字母表情符号”,例如“????”和 '????'在 Python 中将它们的常规字母字体(英文字母的原始 ASCII)转换为字符串。
例如: '????????????????????' 应该变成 'Rotem' 并且 '????ëⓁ??????ᴏ' 应该变成 'HeLlo' 等等……
感谢大家的回答:)
【问题讨论】:
标签: python string utf-8 emoji lib
我想知道如何转换“字母表情符号”,例如“????”和 '????'在 Python 中将它们的常规字母字体(英文字母的原始 ASCII)转换为字符串。
例如: '????????????????????' 应该变成 'Rotem' 并且 '????ëⓁ??????ᴏ' 应该变成 'HeLlo' 等等……
感谢大家的回答:)
【问题讨论】:
标签: python string utf-8 emoji lib
很难有所有的情况。
我的尝试:
import unicodedata
s = '?????'
s = '?ëⓁ?ᴏ'
def normalize_compatibily(s):
return unicodedata.normalize('NFKD', s)
def remove_accents(s):
return ''.join(c for c in unicodedata.normalize('NFD', s)
if unicodedata.category(c).startswith('L'))
print(s)
s = normalize_compatibily(s)
print(s)
s = remove_accents(s)
print(s)
解决一些案例。
不幸的是,在 U+1D0F LATIN LETTER SMALL CAPITAL O 的情况下,Unicode 数据库中没有数据,这可以帮助我们。并非如此,Unicode 名称 unicodedata.name() 可能会有所帮助,例如使用正则表达式,但这意味着要查找所有相似的字符,并且如果字母不在名称中,它将失败。
但是还有一个关于 confusable characters 的表(不在主数据库上),所以有一个 Python 库: https://pypi.org/project/confusables/,见最后一个例子。
您可能需要混合使用这两种方法,并最终添加一些不太容易混淆或相关的新字符,但无论如何用于替换其他字符。
【讨论】: