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

如何通过python更改文件系统编码?,python,encoding,utf-8,filesystems,python-2.x,Python,Encoding,Utf 8,Filesystems,Python 2.x,我该如何改变这一点?我知道如何更改默认的系统编码 >>> import sys >>> sys.getfilesystemencoding() 'UTF-8' 重新加载(系统) >>>sys.setdefaultencoding('ascii') 但是没有sys.setfilesystemencoding文件系统编码在许多情况下是操作系统的固有属性。它不能更改-如果出于某种原因,您需要创建名称编码与文件系统编码不同的文件,请不要对文件名使用Unicode字

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

>>> import sys
>>> sys.getfilesystemencoding()
'UTF-8'
重新加载(系统) >>>sys.setdefaultencoding('ascii')
但是没有
sys.setfilesystemencoding

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


特别要注意的是,在Windows系统上,文件系统本机是Unicode,因此实际上没有进行转换,因此,不可能使用替代的文件系统编码。

有两种方法可以更改它:

>>> import sys
>>> sys.getfilesystemencoding()
'UTF-8'
1) (仅限linux)
export LC\u CTYPE=en\u US.UTF8
在启动python之前:

>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('ascii')
请注意,如果未设置LANG,它将作为LC_CTYPE的默认值,而LC_ALL将同时覆盖LC_CTYPE和LANG)

2) monkeypatching:

$ 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
这两种方法都允许像
os.stat
这样的函数接受unicode(python2.x)字符串。
否则,这些函数在文件名中看到非ascii符号时会引发异常。

@sureshvv您的操作系统是什么?Ubuntu 16.04。不得不将LANG=en_US.UTF8添加到/etc/environment并重新启动。@在这种情况下,确实重新启动shvv是一种过分的做法,但我很高兴您已经解决了这个问题。您是直接从命令行还是作为系统服务启动python?仅从命令行启动。我所做的更改直到重新启动后才生效。@sureshvv这并不奇怪
/etc/environment
,但是
export LANG=en_US.UTF8
立即生效