为什么猴子补丁sys.getfilesystemencoding()?

时间:2017-12-07 10:08:34

标签: python python-unicode os.path

在Python中可以使用sys.getfilesystemencoding()读取文件系统编码。

但似乎没有正式的方法设置文件系统编码。

请参阅:How to change file system encoding via python?

我发现了这个肮脏的黑客:

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

是否有更好的解决方案,如果在启动解释器之前更改环境变量LANG不是一个选项?

背景,我为什么要这样:

这有效:

user@host:~$ python src/setfilesystemencoding.py 
LANG: de_DE.UTF-8
sys.getdefaultencoding(): ascii
sys.getfilesystemencoding(): UTF-8

这不起作用:

user@host:~$ LANG=C python src/setfilesystemencoding.py 
LANG: C
sys.getdefaultencoding(): ascii
sys.getfilesystemencoding(): ANSI_X3.4-1968
Traceback (most recent call last):
  File "src/setfilesystemencoding.py", line 10, in <module>
    with open('/tmp/german-umlauts-üöä', 'wb') as fd:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 20-22: ordinal not in range(128)

这是一个简单的脚本:

# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, unicode_literals, print_function

import os, sys

print('LANG: {}'.format(os.environ['LANG']))
print('sys.getdefaultencoding(): {}'.format(sys.getdefaultencoding()))
print('sys.getfilesystemencoding(): {}'.format(sys.getfilesystemencoding()))

with open('/tmp/german-umlauts-üöä', 'wb') as fd:
    fd.write('foo')

我跳过上面的猴子修补就可以解决这个问题......但事实并非如此。对不起,这个问题没有任何意义了。我把它关闭了。

我的解决方案:使用LANG=C.UTF-8

0 个答案:

没有答案