Как изменить кодировку файловой системы через python?

>>> import sys
>>> sys.getfilesystemencoding()
'UTF-8'

Как это изменить? Я знаю, как изменить системную кодировку по умолчанию.

>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('ascii')

но нет sys.setfilesystemencoding.

2 ответов


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

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


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

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

$ 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 в имя файла.