我当前的一个周末项目有一个问题。 我正在编写一个Python脚本,该脚本从不同的来源获取一些数据,然后将所有内容吐给esc-pos打印机。 您可能会想到pos打印机与emoji表情不完全一样...
所以这样的文字:
可爱!!!!!!!!????????????????
给我这个字符串:
'\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] Ke Ai !!!!!!!![SMILING FACE WITH HEART-SHAPED
EYES][SMILING FACE WITH HEART-SHAPED EYES][SMILING FACE WITH
HEART-SHAPED EYES][SMILING FACE WITH HEART-SHAPED EYES][SMILING FACE
WITH HEART-SHAPED EYES][SMILING FACE WITH HEART-SHAPED EYES][SMILING
FACE WITH HEART-SHAPED EYES][FACE WITH STUCK-OUT TONGUE AND
TIGHTLY-CLOSED EYES]
尝试这个
import unicodedata
print( unicodedata.name(u'\U0001f60d'))
结果是
SMILING FACE WITH HEART-SHAPED EYES