Windowsのディレクトリには、2つのファイルがあり、その両方に名前のアクセント付き文字: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はファイル名に1バイトのAPIを使用するため、t1û.fnのアクセント付き文字は1バイトの\xfb
にマッピングされ、acce t2ű.fnのnted文字は、アクセントのないASCIIシングルバイトu
にマップされます。
Python 2のWindowsでファイル名にマルチバイトAPIを使用するにはどうすればよいですか?私はWindows上のPython 2のコンソール版で両方のファイルを開きたいです。
は、 'パスbytes'この動作のためのWindows上で廃止されていることに注意してください。ファイルシステムのエンコーディングを仮定して3.6+で返された 'bytes'パスのサポートはUTF-8です。 3.6では、 ''t1û.fn ''に加えて' b't1 \ xc3 \ xbb.fn''を開くことができ、 'os.listdir(b'。 ')'はファイル名をUTF-8としてエンコードします。内部的には、Windowsのワイド文字APIを使用するためにUTF-16にトランスコードされます。 – eryksun