Python-用ASCII字符替换Unicode表情符号 [英] Python - replace unicode emojis with ASCII characters

查看:0
本文介绍了Python-用ASCII字符替换Unicode表情符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我现在的一个周末项目出了点问题。我正在编写一个Python脚本,该脚本从不同的来源获取一些数据,然后将所有数据输出到Esc-pos打印机。正如你可能想象的那样,POS打印机并不完全喜欢表情符号...

这样的文本:

可爱!!!!!!!!😍😍😍😍😍😍😍😝

给我这个字符串:

'u53efu7231!!!!!!!!U0001f60dU0001f60dU0001f60dU0001f60dU0001f60dU0001f60dU0001f60dU0001f61d'

打印机输出的结果当然与我想要的完全不同。因此,我需要用其他字符替换这些非ASCII字符。我真的不喜欢第一个字符,但我确实关心表情符号。使用unidecode(str(text))这样的命令至少会将它们去掉,但我想将它们转换为更有用的东西。要么变成像[:-D]这样的经典微笑,要么变成[心形眼睛的笑脸]。

我的问题是...人们将如何着手做这件事呢?为大多数常见表情手动创建查询表似乎有点繁琐,所以我想知道是否还有其他我可以做的事情。

推荐答案

通过关于unicodedata.name的提示和一些进一步的研究,我设法将这件事组合在一起:

import unicodedata
from unidecode import unidecode

def deEmojify(inputString):
    returnString = ""

    for character in inputString:
        try:
            character.encode("ascii")
            returnString += character
        except UnicodeEncodeError:
            replaced = unidecode(str(character))
            if replaced != '':
                returnString += replaced
            else:
                try:
                     returnString += "[" + unicodedata.name(character) + "]"
                except ValueError:
                     returnString += "[x]"

    return returnString

基本上,它首先尝试找到最合适的ASCII表示,如果失败,它会尝试使用Unicode名称,如果同样失败,它只会用一些简单的标记来替换它。

以以下字符串为例:

šeđfčgžhäi?j?k可爱!!!!!!!!😍😍😍😍😍😍😍😝

并运行函数:

string = u'abcdšeđfčgžhÅiØjÆk u53efu7231!!!!!!!!U0001f60dU0001f60dU0001f60dU0001f60dU0001f60dU0001f60dU0001f60dU0001f61d'
print(deEmojify(string))

将产生以下结果:

AbcdsedfcgzhAiOjAEk[x]可爱![心形笑脸 眼睛][心形眼睛的笑脸][笑脸 心形眼睛][心形眼睛的笑脸][笑脸 心形眼睛][笑脸心形眼睛][微笑 心形眼睛的脸[舌头伸出来的脸 紧闭双眼]

这篇关于Python-用ASCII字符替换Unicode表情符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆