2

私は2つの異なるファイルを持っています:

'╠.txt'および'¦.txt'

そのような単純なコード:

files = os.listdir('E:\pub\private\desktop\')
for f in files:
    print f, repr(f), type (f)

戻るだろう

¦.txt '\xa6.txt' <type 'str'>
¦.txt '\xa6.txt' <type 'str'>

OxCCの代わりに╠文字のコード0xA6を取得している理由がわかりません。私はencode-decodeメソッドを使って遊んでみましたが、成功しませんでした。sys.getfilesystemencoding()がmbcsに設定されていることに気づきましたが、cp437のように変更することはできません。

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

4

にUnicode文字列を渡す必要がos.listdirあり、PythonはUnicodeファイル名を返します。

# a string that is unicode+raw (escapes \)
path = ur"E:\pub\private\desktop"
print os.listdir(path)
# [u'\xa6.txt', u'\u2560.txt']

Windows NTは実際にはファイル名にUnicodeを使用しますが、エンコードされたパス名を渡すときにPythonがファイル名をエンコードしようとしていると思います。

于 2011-06-21T14:26:39.230 に答える