作者:fengzi199171 | 来源:互联网 | 2023-02-04 18:19
我当前的一个周末项目有一个问题。我正在编写一个Python脚本,该脚本从不同的来源获取一些数据,然后将所有内容吐给esc-pos打印机。您可能会想到pos打印机与emoji表情不完全一样...
所以这样的文字:
??!!!!!!!!
给我这个字符串:
'\u53ef\u7231!!!!!!!!\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f61d'
打印机输出的结果与我当然想要的完全不同。所以我需要用其他东西代替这些非ASCII字符。我不太在乎第一个字符,但我确实在乎表情符号。使用类似的东西:unidecode(str(text))
至少会去除它们,但是我想将它们转换为更有用的东西。可以进入[:-D]之类的经典表情符号,也可以进入[带有心形眼睛的笑脸]。
我的问题是...该怎么做?手动为最常见的表情符号创建查找表似乎有些乏味,因此我想知道是否还有其他事情可以做。
1> user3082900..:
通过技巧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 !!!!!!!! [带有心形眼睛的笑脸] [带有心形眼睛的笑脸] [带有心形眼睛的笑脸] [带有心形眼睛的笑脸] [带有心形眼睛的笑脸] [带有心形眼睛的笑脸] [带有心形眼睛的微笑脸] [带有伸出舌头和密闭眼睛的脸]