在Windows中的一個目錄中,我有兩個文件,它們的名稱中都帶有重音符:t1û.fn
和t2ű.fn
;在命令提示符下鍵入命令dir
同時顯示正確:在Windows的Python 2中打開名稱中帶有重音字符的文件
S:\p>dir t*.fn
Volume in drive S is q
Volume Serial Number is 05A0-8823
Directory of S:\p
2017-09-03 14:54 4 t1û.fn
2017-09-03 14:54 4 t2ű.fn
2 File(s) 8 bytes
0 Dir(s) 19,110,621,184 bytes free
截圖:
然而,Python不能看到這兩個文件:
S:\p>python -c "import os; print [(fn, os.path.isfile(fn)) for fn in os.listdir('.') if fn.endswith('.fn')]"
[('t1\xfb.fn', True), ('t2u.fn', False)]
它看起來像Python 2使用單字節API作爲文件名,因此t1û.fn中的重音字符被映射到單個字節\xfb
,並且acce t2ű.fn中的nted字符映射到無重音的ASCII單字節u
。
在Python 2中,如何在Windows上使用多字節API作爲文件名?我想在Windows上以Python 2的控制檯版本打開這兩個文件。
僅供參考,如果你做跳躍到Python 3,注意'bytes'路徑被拋棄了,因爲這種行爲在Windows上。通過假裝文件系統編碼爲UTF-8,支持在3.6+中返回的「字節」路徑。在3.6中你可以打開'b't1 \ xc3 \ xbb.fn'',''t1û.fn'','os.listdir(b'。')'將文件名編碼爲UTF-8。它在內部轉碼爲UTF-16以使用Windows寬字符API。 – eryksun