我当前的周末项目之一有问题。我正在编写一个 Python 脚本,它从不同来源获取一些数据,然后将所有内容输出到 esc-pos 打印机。正如您可能想象的那样,POS 打印机并不完全喜欢表情符号......
所以文本如下:
可爱!!!!!!!!????????????????????????????????
给我这个字符串:
'\u53ef\u7231!!!!!!!!\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f61d'
当然,打印机输出的结果与我想要的完全不同。所以我需要用其他字符替换这些非 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 名称,如果即使失败,它也只是用一些简单的标记替换它。
例如,采用这个字符串:
abcdšeđfčgžhÅiØjÆk 可爱!!!!!!!!!????????????????????????????????
并运行该函数:
string = u'abcdšeđfčgžhÅiØjÆk \u53ef\u7231!!!!!!!!\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f61d'
print(deEmojify(string))
将产生以下结果:
abcdsedfcgzhAiOjAEk[x] 可艾!!!!!!!![心形笑脸
眼睛][心形眼睛的笑脸][心形眼睛的笑脸
心形眼睛][笑脸心形眼睛][笑脸
心形眼][笑脸心形眼][微笑
心形眼脸][吐舌脸
紧闭双眼]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)