2012-04-22 13 views
48

Duplicar posible:
How do I treat an ASCII string as unicode and unescape the escaped characters in it in python?
How do convert unicode escape sequences to unicode characters in a python stringcadena de Python a Unicode

tengo una cadena que contiene caracteres Unicode por ejemplo, \u2026 etc. De alguna manera, no se recibió como unicode, pero se recibió como str. ¿Cómo lo convierto 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 claramente unicode(a) no es la respuesta. Entonces, ¿qué es?

+1

La etiqueta dice que sí, pero para precisar con mayor claridad, esta pregunta se centra en Python 2.x, 3.x no – Adam

Respuesta

68

Unicode escapa 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 hacer Unicode fuera de esto, utilizar decode('unicode-escape'):

a="\u2026" 
print repr(a) 
print repr(a.decode('unicode-escape')) 

## '\\u2026' 
## u'\u2026' 
24

decodificarlo con el códec unicode-escape:

>>> a="Hello\u2026" 
>>> a.decode('unicode-escape') 
u'Hello\u2026' 
>>> print _ 
Hello… 

Esto se debe a que una cadena no Unicode del \u2026 no se reconoce, pero se trata en cambio como una serie literal de caracteres (para decirlo más claramente, 'Hello\\u2026'). Necesita decodificar los escapes, y el códec unicode-escape puede hacer eso por usted.

Tenga en cuenta que usted puede conseguir unicode reconocer que de la misma manera especificando el argumento códec:

>>> unicode(a, 'unicode-escape') 
u'Hello\u2026' 

Pero la forma a.decode() es más agradable.

16
>>> a="Hello\u2026" 
>>> print a.decode('unicode-escape') 
Hello… 
Cuestiones relacionadas