2010-05-18 9 views
9

acabo de conocer Python durante unos días. Unicode parece ser un problema con Python.Mostrar la cadena escapada como Unicode en Python

Tengo un texto archivo almacena una cadena de texto como éste

'\u0110\xe8n \u0111\u1ecf n\xfat giao th\xf4ng Ng\xe3 t\u01b0 L\xe1ng H\u1ea1' 

puedo leer el archivo e imprimir la cadena fuera pero muestra incorrectamente. ¿Cómo puedo imprimirlo para detectar correctamente la siguiente manera:

"Đèn đỏ nút giao thông Ngã tư Láng Hạ" 

Gracias de antemano

+1

Al "imprimir la secuencia", ¿te refieres a una consola? Si es así, probablemente sea su consola el problema: ¿está seguro de que admite caracteres Unicode? –

Respuesta

0

probar este

>>> s=u"\u0110\xe8n \u0111\u1ecf n\xfat giao th\xf4ng Ng\xe3 t\u01b0 L\xe1ng H\u1ea1" 
>>> print s 
=> Đèn đỏ nút giao thông Ngã tư Láng Hạ 
8
>>> x=r'\u0110\xe8n \u0111\u1ecf n\xfat giao th\xf4ng Ng\xe3 t\u01b0 L\xe1ng H\u1ea1' 
>>> u=unicode(x, 'unicode-escape') 
>>> print u 
Đèn đỏ nút giao thông Ngã tư Láng Hạ 

Esto funciona en un Mac, donde Terminal.App correctamente hace que sys.stdout.encoding se establezca en utf-8. Si la plataforma no establece ese atributo correctamente (o en absoluto), tendrá que sustituir la última línea con

print u.decode('utf8') 

o cualquier otra codificación de su terminal/consola está utilizando.

Tenga en cuenta que en la primera línea asigno un literal de cadena sin formato para que las "secuencias de escape" no se expandan, eso solo imita lo que sucedería si se estuviera leyendo bytes de x de un archivo (de texto o binario) ese contenido literal.

1

Ayuda mostrar un ejemplo simple con código y dar salida a lo que ha intentado explícitamente. Supongo que su consola no es compatible con vietnamita. Aquí hay algunas opciones:

# A byte string with Unicode escapes as text. 
>>> x='\u0110\xe8n \u0111\u1ecf n\xfat giao th\xf4ng Ng\xe3 t\u01b0 L\xe1ng H\u1ea1' 

# Convert to Unicode string. 
>>> x=x.decode('unicode-escape') 
>>> x 
u'\u0110\xe8n \u0111\u1ecf n\xfat giao th\xf4ng Ng\xe3 t\u01b0 L\xe1ng H\u1ea1' 

# Try to print to my console: 
>>> print x 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\dev\python\lib\encodings\cp437.py", line 12, in encode 
    return codecs.charmap_encode(input,errors,encoding_map) 
UnicodeEncodeError: 'charmap' codec can't encode character u'\u0110' in position 0: 
    character maps to <undefined> 

# My console's encoding is cp437. 
# Instead of the default strict error handling that throws exceptions, try: 
>>> print x.encode('cp437','replace') 
?èn ?? nút giao thông Ng? t? Láng H?  

# Six characters weren't supported. 
# Here's a way to write the text to a temp file and display it with another 
# program that supports the UTF-8 encoding: 
>>> import tempfile 
>>> f,name=tempfile.mkstemp() 
>>> import os 
>>> os.write(f,x.encode('utf8')) 
48 
>>> os.close(f) 
>>> os.system('notepad.exe '+name) 

Espero que te ayude.

Cuestiones relacionadas