2013-11-24 4 views

ответ

3

Кодирование файловой системы во многих случаях является неотъемлемым свойством операционной системы. Его нельзя изменить - если по какой-то причине вам нужно создавать файлы с именами, закодированными иначе, чем подразумевается в кодировке файловой системы, не используйте строки Unicode для имен файлов. (Или, если вы используете Python 3, использовать объект байт вместо строки.)

See the documentation for details. В частности, обратите внимание, что на системах Windows, файловая система изначально Unicode, поэтому преобразование не является на самом деле и, следовательно, невозможно использовать альтернативную кодировку файловой системы.

4

Есть два способа изменить это:

1) (Linux только) export LC_CTYPE=en_US.UTF8 перед запуском Python:

$ LC_CTYPE=C python -c 'import sys; print(sys.getfilesystemencoding())' 
ANSI_X3.4-1968 
$ LC_CTYPE=C.UTF-8 python -c 'import sys; print(sys.getfilesystemencoding())' 
UTF-8 

Обратите внимание, что LANG служит в качестве значения по умолчанию для LC_CTYPE, если это не множество, в то время как LC_ALL перекрывает LC_CTYPE и LANG)

2) monkeypatching:

import sys 
sys.getfilesystemencoding = lambda: 'UTF-8' 

Оба метода позволяют функциям типа os.stat принимать строки unicode (python2.x). В противном случае эти функции вызывают исключение, если в имени файла отображаются символы не-ascii.

+0

метод 1 не работает или мне – sureshvv

+0

@sureshvv Какая у вас ОС? –

+0

Ubuntu 16.04. Пришлось добавить LANG = en_US.UTF8 в/etc/environment и перезагрузиться. – sureshvv

Смежные вопросы