2010-05-18 77 views
9

我剛剛知道Python幾天。 Unicode似乎是Python的一個問題。在Python中顯示轉義字符串爲Unicode

我有一個文本文件存儲的文本字符串這樣

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

我可以讀取文件和打印串出,但顯示不正確。 我怎樣才能把它打印出來,以正確地篩選如下:提前

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

感謝

+1

通過「打印字符串」,你的意思是一個控制檯?如果是這樣,這可能是你的控制檯,這是問題 - 你確定它支持Unicode字符? – 2010-05-18 08:44:00

回答

0

試試這個

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

這工作在Mac上,其中Terminal.App正確使得sys.stdout.encoding被設置爲utf-8。如果你的平臺不正確(或全部)設置該屬性,您需要與

print u.decode('utf8') 

或任何其他編碼的終端/主機使用,以取代最後一行。

注意的是,在第一行我給你一個原始字符串字面量,使「轉義序列」不會擴大 - 這只是模仿,如果字節字符串x正在從一個(文本或二進制)讀會發生什麼,與文件那個文字內容。

1

它有助於展示代碼的簡單示例並輸出您明確嘗試的內容。猜測你的遊戲機不支持越南語。這裏有一些選項:

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

希望可以幫助你。

相關問題