2017-09-03 85 views
0

在Windows中的一個目錄中,我有兩個文件,它們的名稱中都帶有重音符:t1û.fnt2ű.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 

截圖:

screenshot of dir

然而,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的控制檯版本打開這兩個文件。

+0

僅供參考,如果你做跳躍到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

回答

1

使用unicode字符串:

f1 = open(u"t1\u00fb.fn")  # t1û.fn 
f2 = open(u"t2\u0171.fn")  # t2ű.fn 
+0

謝謝,它適用於'open'。 'os.listdir(u'。')'返回帶有正確重音字符的文件名。 – pts

相關問題