如何正確讀取日文和中文字符。 我正在使用python 2.5。輸出顯示爲"E:\Test\?????????"
中文和日文字符支持python
path = r"E:\Test\は最高のプログラマ"
t = path.encode()
print t
u = path.decode()
print u
t = path.encode("utf-8")
print t
t = path.decode("utf-8")
print t
如何正確讀取日文和中文字符。 我正在使用python 2.5。輸出顯示爲"E:\Test\?????????"
中文和日文字符支持python
path = r"E:\Test\は最高のプログラマ"
t = path.encode()
print t
u = path.decode()
print u
t = path.encode("utf-8")
print t
t = path.decode("utf-8")
print t
您應該強制字符串是一個unicode
對象像字符串文字
path = ur"E:\Test\は最高のプログラマ"
文檔相關的2.5位於here
編輯:我如果對象是2.5中的unicode
,但文檔確實表示\uXXXX[XXXX]
將被處理,並且stri ng將是「一個Unicode字符串」。
Python 2.5支持很好,但unicode對象只是圖片的一小部分。 –
請仔細閱讀Python Unicode HOWTO;它解釋瞭如何處理和在您的Python代碼中包含非ASCII文本。
如果你想在你的代碼日文文本文字,你有幾種選擇:
使用Unicode文本(創建unicode
對象而不是字節字符串),而任何非ASCII碼點被表示爲一個unicode轉義字符。他們採取的\uabcd
的形式,讓一個反斜槓,一個u
和4個十六進制數字:
ru = u'\u30EB'
將是一個字符,片假名「RU」碼點(「ル」)。
使用unicode字面值,但在某種形式的編碼中包含字符。你的文本編輯器將以給定的編碼保存文件(比如UTF-16);你需要在源文件的頂部聲明編碼:其中「ル」包括不使用轉義
# encoding: utf-16
ru = u'ル'
。 Python 2文件的默認編碼是ASCII,所以通過聲明編碼,可以直接使用日文。
使用字節字符串文字,就緒編碼。通過其他方式對代碼點進行編碼,並將它們包含在字節字符串文字中。如果你打算跟他們做的是反正編碼形式使用它們,這應該是罰款:
ru = '\xeb\x30' # ru encoded to UTF16 little-endian
我編碼「ル」爲UTF-16小端,因爲這是默認的Windows NTFS文件名的編碼。
接下來的問題將是你的終端,Windows控制檯因爲不支持許多字符集而出名。您可能想要將其配置爲處理UTF-8。見this question的一些細節,但你需要在控制檯中運行以下命令:
chcp 65001
切換到UTF-8,您可能需要切換到一個控制檯字體,可以處理你的代碼點(龍力也許?)。
['chcp 65001'沒有必要,或者通用性不夠](http://bugs.python.org/issue1602)。 – jfs
@ J.F.Sebastian:是的,我在這裏和那裏看到了有關這個問題的線索,包括我所鏈接的SO問題。感謝那個錯誤鏈接,這很好。 –
有兩個獨立的問題:
如果使用非ASCII字符和使用數據的Unicode文本表示文本如您應該指定Python源編碼:
# -*- coding: utf-8 -*-
path = ur"E:\Test\は最高のプログラマ"
Printing Unicode to Windows console is complicated但是如果你設置正確的字體,那麼只是:
print path
可能會工作。
無論您的控制檯是否可以顯示路徑,它應該是罰款傳遞的Unicode路徑文件系統功能,例如: -
entries = os.listdir(path)
不要字節串叫.encode(char_enc)
,稱之爲對Unicode字符串代替。
不要在Unicode字符串上調用.decode(char_enc)
,而是使用字符串調用它。
http://www.pgbovine.net/unicode-python.htm,它會回答你所有的問題。按照鏈接。 – Martian2049