2010-05-18 8 views
9

ich habe gerade Python für ein paar Tage gekannt. Unicode scheint ein Problem mit Python zu sein.Zeige Escaped String als Unicode in Python

Ich habe eine Textdatei speichert eine Textzeichenfolge wie diese

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

ich die Datei lesen und die Zeichenfolge gedruckt, aber es zeigt falsch. Wie kann ich es korrekt gedruckt wie folgt zu herauszufiltern:

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

Vielen Dank im Voraus

+1

Mit "drucke die Zeichenfolge", meinst du zu einer Konsole? Wenn das der Fall ist, ist es wahrscheinlich Ihre Konsole. Sind Sie sicher, dass Unicode-Zeichen unterstützt werden? –

Antwort

0

Versuchen Sie, diese

>>> 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ạ 

Das in einem Mac arbeitet, wo Terminal.App richtig macht sys.stdout.encoding auf utf-8 eingestellt werden. Wenn Ihre Plattform nicht das Attribut richtig eingestellt (oder überhaupt), müssen Sie mit

print u.decode('utf8') 

oder was auch immer anderen kodieren Terminal die letzte Zeile ersetzen/Konsole verwendet.

Beachten Sie, dass in der ersten Zeile ich einen rohen Stringliteral zuweisen, so dass die „Escape-Sequenzen“ nicht erweitert werden - das ist genau das, was, wenn bytestring x passieren würde, imitiert wurde aus einem (Text oder binär) gelesen werden Datei mit dieser wörtliche Inhalt.

1

Es hilft, ein einfaches Beispiel mit Code zu zeigen und auszugeben, was Sie explizit versucht haben. Vermutlich unterstützt Ihre Konsole kein Vietnamesisch. Hier sind einige Optionen:

# 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) 

Hoffe, dass Sie hilft.