2017-05-05 107 views
1

我有一個當前週末項目的問題。我正在編寫一個Python腳本,用於從不同來源獲取一些數據,然後將所有內容吐出到esc-pos打印機。正如你可能想象的POS打印機不喜歡的表情符號,exaclty ...Python - 用ASCII字符替換unicode emojis

所以像這樣的文字:

可愛!!!!!!!! 

給我這個字符串:

'\u53ef\u7231!!!!!!!!\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f61d' 

,結果出來的打印機與我當然想要的完全不同。所以我需要用別的東西替換這些非ASCII字符。我並不是很在意第一個角色,但我確實在乎emojis。使用類似於:unidecode(str(text))至少會將它們去除,但我想將它們轉換爲更有用的東西。可以放入經典的表情符號,如[:-D]或[SMILING FACE WITH HEART-SHEED EYES]。

我的問題是...怎麼會這樣做呢?手工爲最常見的表情符號創建一個查找表似乎有點乏味,所以我想知道是否還有別的東西可以做。

+0

您可以希望有一個圖書館或做繁瑣的工作[FACE。有[this](https://pypi.python.org/pypi/emoji)可能有幫助。 – user3591723

回答

2

憑藉尖端的距離約爲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 n如果即使失敗了,它也會用一些簡單的標記來代替它。

例如以該字符串:

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]可愛!!!!!!!! [笑臉心 - SHOPED EYES] [微笑的眼睛與心形眼] [微笑的臉與 心形眼] [微笑的臉與心形眼] [微笑的臉 與心形眼] [微笑的臉與心形眼睛] [微笑 心形眼睛FACE]套牢,舌頭和 緊緊閉着眼睛]

1

試試這個

import unicodedata 
print(unicodedata.name(u'\U0001f60d')) 

結果是

SMILING FACE WITH HEART-SHAPED EYES