Форматирование имени файла в Python под Windows - PullRequest
2 голосов
/ 21 июня 2011

У меня есть два файла с именами:

'╠.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'>

Не понимаю, почему я получаю код 0xA6 для символа instead вместо OxCC. Я пытался играть с методом кодирования-декодирования, но безуспешно. Я заметил, что sys.getfilesystemencoding () имеет значение mbcs, но мне не удается изменить его, например, cp437.

Любая помощь очень ценится. Спасибо!

1 Ответ

4 голосов
/ 21 июня 2011

Вы должны передать строку 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 пытается их кодировать, когда вы передаетезакодированное имя пути.

...