2017-05-05 6 views
1

Ich habe ein Problem mit einem meiner aktuellen Wochenend-Projekte. Ich schreibe ein Python-Skript, das Daten aus verschiedenen Quellen holt und dann alles auf einen esc-pos-Drucker ausgibt. Wie Sie vielleicht POS-Drucker nicht exaclty wie Emojis ...Python - ersetzen Unicode Emojis mit ASCII-Zeichen

So Text wie folgt vorstellen:

可爱!!!!!!!! 

gibt mir diese Zeichenfolge:

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

Das Ergebnis, das aus kommt Der Drucker ist ganz anders als ich es mir natürlich gewünscht hätte. Also muss ich diese Nicht-ASCII-Zeichen durch etwas anderes ersetzen. Ich interessiere mich nicht wirklich für die ersten Charaktere, aber ich interessiere mich für Emojis. Mit etwas wie: unidecode(str(text)) werde ich sie zumindest entfernen, aber ich möchte sie in etwas Nützlicheres verwandeln. Entweder in klassische Smilies wie [:-D] oder in [SMILING FACE WITH HEART-SHAPED EYES].

Mein Problem ist ... wie würde man das machen? Manuelles Erstellen einer Nachschlagetabelle für die meisten gängigen Emojis erscheint ein wenig mühsam, also frage ich mich, ob ich noch etwas anderes machen kann.

+0

Sie können für eine Bibliothek hoffen oder die mühsame Arbeit tun. Es gibt [this] (https://pypi.python.org/pypi/emoji), die helfen könnten. – user3591723

Antwort

2

Mit der Spitze über unicodedata.name ist und einige weitere Forschung ich es geschafft, diese Sache zusammen:

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 

Im Grunde ist es erste Versuche Um die am besten geeignete ASCII-Darstellung zu finden, versucht es, wenn das fehlschlägt, den Unicode n zu verwenden ame, und wenn auch das scheitert, ersetzt es einfach durch einen einfachen Marker.

Zum Beispiel nehmen diese Zeichenfolge:

abcdšeđfčgžhÅiØjÆk 可爱 !!!!!!!!

und Ausführen der Funktion:

string = u'abcdšeđfčgžhÅiØjÆk \u53ef\u7231!!!!!!!!\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f60d\U0001f61d' 
print(deEmojify(string)) 

produzieren folgendes Ergebnis:

abcdsedfcgzhAiOjAEk [x] Ke Ai !!!!!!!! [LÄCHELN GESICHT MIT HERZ GEFORMTE AUGEN] [LÄCHELNDES GESICHT mit herzförmigem AUGE] [LäCHELT GESICHT MIT HEART-SHAPED EYES] [LÄCHELNDES GESICHT mit herzförmigem EYES] [lächelndes Gesicht mit herzförmigem AUGE] [LÄCHELNDES GESICHT mit herzförmigem AUGE ] [LÄCHELN GESICHT mit herzförmigem AUGE] [GESICHT MIT STUCK-OUT Nut-und zugekniffenen Augen]

1

Versuchen Sie, diese

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

Ergebnis

SMILING FACE WITH HEART-SHAPED EYES 
Verwandte Themen