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

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

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

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

Но нет sys.setfilesystemencoding.

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

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

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

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 принимать os.stat unicode (python2.x). В противном случае эти функции вызывают исключение, когда они видят символы не-ascii в имени файла.