>>> import sys
>>> sys.getfilesystemencoding()
'UTF-8'
我如何更改那个?我知道如何更改默认系统编码。
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('ascii')
但是没有sys.setfilesystemencoding
。
>>> import sys
>>> sys.getfilesystemencoding()
'UTF-8'
我如何更改那个?我知道如何更改默认系统编码。
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('ascii')
但是没有sys.setfilesystemencoding
。
有两种方法可以更改它:
export LC_CTYPE=en_US.UTF-8
:export LC_CTYPE=en_US.UTF-8
:$ LC_CTYPE=C python -c 'import sys; print(sys.getfilesystemencoding())'
ANSI_X3.4-1968
$ LC_CTYPE=en_US.UTF-8 python -c 'import sys; print(sys.getfilesystemencoding())'
UTF-8
请注意,如果未设置LC_CTYPE,则LANG会作为其默认值,而LC_ALL将覆盖LC_CTYPE和LANG的值。
import sys
sys.getfilesystemencoding = lambda: 'UTF-8'
两种方法都可以让像os.stat
这样的函数接受Unicode(Python2.x)字符串。否则,当这些函数在文件名中看到非ASCII符号时,它们会引发异常。
更新:在(1)变量中,语言环境必须可用(出现在locale -a
中),以便此设置能够产生预期效果。
/etc/environment
的事情并不令人意外,但是 export LANG=en_US.UTF8
立即生效。 - Antony Hatchkinsgetfilesystemencoding
的特定环境变量是 LC_CTYPE。如果未设置它,则使用 LANG 作为默认值。最后,如果设置了 LC_ALL,则会覆盖 LC_CTYPE 和 LANG 两者。 - Antony Hatchkins
sys.setfilesystemencoding
函数和环境变量PYTHONFSENCODING
。它们存在问题并已被删除,现在Python使用区域设置编码作为文件系统编码。请参阅Victor Stinner博客中的Painful History of the Filesystem Encoding。 - wim