Tengo una cadena que contiene caracteres unicode, por ejemplo \u2026
etc. Por alguna razón no lo recibo como unicode
, sino como str
. ¿Cómo puedo convertirla de nuevo a unicode?
>>> a="Hello\u2026"
>>> b=u"Hello\u2026"
>>> print a
Hello\u2026
>>> print b
Hello…
>>> print unicode(a)
Hello\u2026
>>>
Así que está claro que unicode(a)
no es la respuesta. Entonces, ¿cuál es?
Los escapes Unicode sólo funcionan en cadenas unicode, por lo que este
a="\u2026"
es en realidad una cadena de 6 caracteres: '\', 'u', '2', '0', '2', '6'.
Para convertirlo en unicode, utilice decode('unicode-escape')
:
a="\u2026"
print repr(a)
print repr(a.decode('unicode-escape'))
## '\\u2026'
## u'\u2026'
Descodifícalo con el códec unicode-escape
:
>>> a="Hello\u2026"
>>> a.decode('unicode-escape')
u'Hello\u2026'
>>> print _
Hello…
Esto es porque para una cadena no-unicode el \u2026
no se reconoce, sino que se trata como una serie literal de caracteres (para decirlo más claramente, 'Hola\u2026'
). Necesitas decodificar los escapes, y el códec unicode-escape
puede hacerlo por ti.
Tenga en cuenta que puede hacer que unicode
lo reconozca de la misma forma especificando el argumento codec:
>>> unicode(a, 'unicode-escape')
u'Hello\u2026'
Pero la forma a.decode()
es más agradable.