如何通过python更改文件系统编码?

arj*_*kok 8 python filesystems encoding

>>> import sys
>>> sys.getfilesystemencoding()
'UTF-8'
Run Code Online (Sandbox Code Playgroud)

我该如何改变?我知道如何更改默认的系统编码.

>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('ascii')
Run Code Online (Sandbox Code Playgroud)

但是没有sys.setfilesystemencoding.

Ant*_*ins 8

有两种方法可以改变它:

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
Run Code Online (Sandbox Code Playgroud)

请注意,如果未设置,则LANG用作LC_CTYPE的默认值,而LC_ALL将覆盖LC_CTYPE和LANG)

2)monkeypatching:

import sys
sys.getfilesystemencoding = lambda: 'UTF-8'
Run Code Online (Sandbox Code Playgroud)

这两种方法都允许使用os.stat接受unicode(python2.x)字符串的函数.否则,当这些函数在文件名中看到非ascii符号时会引发异常.


小智 3

在许多情况下,文件系统编码是操作系统的固有属性。如果出于某种原因,您需要创建名称编码与文件系统编码不同的文件,则无法更改 \xe2\x80\x94,请勿使用 Unicode 字符串作为文件名。(或者,如果您使用的是 Python 3,请使用字节对象而不是字符串。)

\n\n

有关详细信息,请参阅文档。特别要注意的是,在 Windows 系统上,文件系统本身就是Unicode,因此实际上不会发生任何转换,因此不可能使用替代文件系统编码。

\n