如何将字符串中的“字母表情符号”转换为常规字母(英语)?在python中

时间:2019-12-16 12:34:24

标签: python string utf-8 emoji lib

我想知道如何在Python字符串中将“?”和“?”等“字母表情符号”转换为它们的常规字母字体(英语字母的原始ASCII)。

例如: '?????'应该成为'Rotem''?ëⓁ?ᴏ'应该成为'Hello' 等等...

感谢所有回答:)

1 个答案:

答案 0 :(得分:0)

很难遇到所有情况。

我的尝试

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拉丁文字母小写O ,Unicode数据库中没有数据,这可以为我们提供帮助。并非如此,Unicode名称unicodedata.name()可能会有所帮助,例如使用正则表达式,但这意味着要查找所有相似的字符,并且如果字母不在名称中,它将失败。

但是还有另一个关于 confusable characters 的表(不在主数据库上),因此有一个Python库: https://pypi.org/project/confusables/,请参阅最后一个示例。

您可能需要混合使用这两种方法,并最终添加一些不太容易混淆也不相关但可以用来替换其他字符的新字符。