2010-05-18 10 views
9

Mam tylko znany Python przez kilka dni. Unicode wydaje się być problemem w Pythonie.Pokaż ciąg znaków Escaped jako Unicode w języku Python

Mam plików tekstowych sklepów ciąg tekstowy jak ten

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

mogę odczytać pliku i wydrukować ciąg ale wyświetla się niepoprawnie. Jak mogę wydrukować go na ekran poprawnie następująco:

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

góry dzięki

+1

Przez "wydruk ciągów" rozumiesz konsolę? Jeśli tak, prawdopodobnie jest to Twoja konsola - czy na pewno obsługuje ona znaki Unicode? –

Odpowiedz

0

Spróbuj

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

To działa w komputerze Mac, gdzie Terminal.App prawidłowo ustawia sys.stdout.encoding na wartość utf-8. Jeśli platforma nie ustawić ten atrybut poprawnie (lub w ogóle), musisz zastąpić ostatni wiersz z

print u.decode('utf8') 

lub cokolwiek innego kodowania terminala/konsoli korzysta.

Zauważ, że w pierwszym wierszu przyporządkowywam surowy tekst literowy, aby "sekwencje specjalne" nie były rozwinięte - to tylko naśladuje to, co by się stało, gdyby testowanie x było odczytywane z pliku (tekstowego lub binarnego) ta dosłowna treść.

1

Pomaga pokazać prosty przykład z kodem i danymi wyjściowymi, który wyraźnie wypróbowałeś. Zgadnij, że twoja konsola nie obsługuje wietnamskich. Oto kilka opcji:

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

Mam nadzieję, że ci pomogę.

Powiązane problemy