Ich habe eine Zeichenkette, die Unicode-Zeichen enthält, z.B. \u2026
usw. Irgendwie wird sie nicht als "Unicode" empfangen, sondern als "Str". Wie kann ich sie wieder in Unicode umwandeln?
>>> a="Hello\u2026"
>>> b=u"Hello\u2026"
>>> print a
Hello\u2026
>>> print b
Hello…
>>> print unicode(a)
Hello\u2026
>>>
Also ist unicode(a)
eindeutig nicht die Antwort. Was ist es dann?
Unicode-Escapes funktionieren nur in Unicode-Zeichenfolgen, so dass diese
a="\u2026"
eigentlich eine Zeichenkette mit 6 Zeichen: '\', 'u', '2', '0', '2', '6'.
Um daraus Unicode zu machen, verwenden Sie decode('unicode-escape')
:
a="\u2026"
print repr(a)
print repr(a.decode('unicode-escape'))
## '\\u2026'
## u'\u2026'
Dekodieren Sie es mit dem Codec unicode-escape
:
>>> a="Hello\u2026"
>>> a.decode('unicode-escape')
u'Hello\u2026'
>>> print _
Hello…
Das liegt daran, dass bei einer Nicht-Unicode-Zeichenkette das \u2026
nicht erkannt wird, sondern als eine wörtliche Folge von Zeichen behandelt wird (um es deutlicher auszudrücken, 'Hello\\u2026'
). Sie müssen die Escape-Zeichen dekodieren, und der Codec unicode-escape
kann das für Sie tun.
Beachten Sie, dass Sie unicode
dazu bringen können, es auf die gleiche Weise zu erkennen, indem Sie das Argument codec angeben:
>>> unicode(a, 'unicode-escape')
u'Hello\u2026'
Aber die a.decode()
Methode ist schöner.