【问题标题】:How to change file system encoding via python?如何通过python更改文件系统编码?
【发布时间】:2013-12-08 22:26:58
【问题描述】:
>>> import sys
>>> sys.getfilesystemencoding()
'UTF-8'

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

>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('ascii')

但是没有sys.setfilesystemencoding

【问题讨论】:

    标签: python encoding utf-8 filesystems python-2.x


    【解决方案1】:

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

    See the documentation for details. 特别要注意,在 Windows 系统上,文件系统是本机 Unicode,因此实际上没有进行任何转换,因此,不可能使用替代文件系统编码.

    【讨论】:

      【解决方案2】:

      有两种方法可以改变它:

      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
      

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

      2) 猴子补丁:

      import sys
      sys.getfilesystemencoding = lambda: 'UTF-8'
      

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

      【讨论】:

      • @sureshvv 你的操作系统是什么?
      • Ubuntu 16.04。必须将 LANG=en_US.UTF8 添加到 /etc/environment 并重新启动。
      • @sureshvv reboot 在这种情况下绝对是一种矫枉过正,但我​​很高兴你已经解决了这个问题。你是直接从命令行启动 python 还是作为系统服务启动?
      • 仅从命令行。我所做的更改直到重新启动才生效。
      • @sureshvv /etc/environment 并不奇怪,但 export LANG=en_US.UTF8 立即生效
      猜你喜欢
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 2016-02-09
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多