2017-01-12 2 views
1

Ich habe einige Probleme mit der Formatierung einer Byte-Ordered-Marke zu Unicode. Es ist eine gewisse Ungereimtheit, die damit einhergeht, wie mein Charakter ausgedrückt wird. Im Grunde wird kein Emoji-Zeichen in Python gedruckt, sondern nur die Zeichenfolge. Hier ist mein Beispiel.Python Unicode-Zeichen-Konvertierung für Emoji

# these codes are coming from a json file; this a representation of one of the codes. 
e = 'U+1F600' # smile grin emoji 

# not sure how to clean this, so here's a basic attempt using regex. 
b = re.compile(r'U\+', re.DOTALL).sub('\U000', e) 

print unicode(b) # output should be '\U0001F600' 

Aus irgendeinem Grund wird kein Emoji-Zeichen gedruckt.

Wenn Sie jedoch die gleiche Zeichenfolge wie ein Literal mit dem u Flag eingeben, funktioniert alles wie erwartet.

print u'\U0001F600' 

Was mache ich hier falsch? Ich dachte, dass die unicode Funktion meine Zeichenfolge in die Arbeitsäquivalent konvertieren würde, aber es ist anscheinend nicht.

Ich verwende Python 2.7

Antwort

8

Ich denke, decode ist das, was Sie suchen,

>>> b = '\U0001F600' 
>>> print b.decode('unicode-escape') 

oder

>>> print unicode(b, 'unicode-escape') 


Das Problem mit

print unicode(b) 

ist, dass die unicode-Funktion versucht, die Zeichenfolge \U0001F600 in Unicode zu konvertieren, was zu \\U0001F600 führt. Um dies zu verhindern, stellen wir die aktuelle Kodierung als unicode-escape

+0

zur Verfügung. Es funktioniert! Danke @ nu11p01n73R für deine Hilfe. Was ist der Grund für diese Unregelmäßigkeit? Inwiefern verändert das die Ausgabe? – lindsay

+1

@lindsay Ich habe eine Erklärung hinzugefügt. Hoffe es hilft – nu11p01n73R

+0

danke nochmal! Das hat alles für mich geklärt. :) – lindsay