如何更改Python的文件系统编码(由sys.getfilesystemencoding()
返回)? 我的目标是在输入Unicode路径时使os.listdir
返回Unicode名称,但这只有在文件系统编码也是Unicode时才有效。更改Python文件系统编码
该文件系统编码用于编码os.listdir(unicodestring)
输出,默认情况下(如果没有指定LC_*
环境变量)它是ASCII。
我试图通过os.putenv
注入LC_ALL
,os.environ
,locale.setlocale
无济于事;文件系统编码不会改变。之后重新加载os
和sys
模块也无济于事。
实施例与LC_ALL指定:
$ env -i LC_ALL=en_US.UTF-8 python -c "import os; print os.listdir(u'.');"
[u'\u0435\u0449\u0433\u0441\u0440']
实施例与空环境:
$ env -i python -c "import os; print os.listdir(u'.');"
['\xd0\xb5\xd1\x89\xd0\xb3\xd1\x81\xd1\x80']
一种可能的解决方案将是包括在一个包装启动脚本环境变量,但是我宁愿一种方法来来自Python内部。
文件系统编码由操作系统设置... – MattDMo
@MattDMo在现代Linux上,假设它是UTF8是安全的。重点是没有环境变量,Python无法确定实际的文件系统编码,并且默认为ASCII。 –