Как изменить кодировку файловой системы через 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 в имя файла.