如何在Python中设置默认编码(setdefaultencoding()函数不存在)?

16 投票
2 回答
31125 浏览
提问于 2025-04-16 23:51

可能重复的问题:
如何更改Python的默认编码?

我正在阅读《Dive into Python》,书中提到在XML解析章节中设置Python的默认编码方式。

setdefaultencoding这个函数是在 python安装目录/site-packages/pyanaconda/sitecustomize.py 中使用的。

import sys
sys.setdefaultencoding('utf-8')

但是当我运行这个脚本时,出现了错误:

AttributeError: 'module' object has no attribute 'setdefaultencoding'

那么,怎么设置默认编码呢?

我使用的是Python 2.7。

解决方案:找到Python安装中的site.py文件。

编辑 setencoding 函数。

def setencoding():
    encoding = "ascii" 
    if 0:
        import locale
        loc = locale.getdefaultlocale()
        if loc[1]:
            encoding = loc[1]
    if 0: #changes comes here, change 0 to 1
        encoding = "undefined" #the encoding you want
    if encoding != "ascii":
        sys.setdefaultencoding(encoding) 

我使用的是Python 2.7。

2 个回答

7

怎么设置默认编码呢?

sitecustomize.py 文件中运行 sys.setdefaultencoding,这个文件需要在 Python 启动时能被找到(比如放在 lib/site-packages 里)。你可以用 sys.getdefaultencoding 来检查这个设置是否生效。


给匿名反对者的补充:

谁反对这个回答的,可以解释一下吗?这个问题只适用于 Python 2.x。如果你在用 Python 3,那就没有 sys.setdefaultencoding 这个东西了。我只是解释了在 Python 2 中如何使用这个函数,并不是在推荐使用它。库文件不应该去修改这个设置,所以在 site.py 和 sitecustomize.py 调用它后,它会从 sys 的命名空间中移除。库文件也不应该假设 2.x 的默认编码是 ASCII,这个要看系统的设置。就我个人而言,我还是保持默认的 ASCII 编码。

8

Python的 sys 模块自从2.0版本就有一个叫做 setdefaultencoding 的功能。不过,

这个功能其实是专门给网站模块用的,其他地方用到的机会不多。一旦网站模块使用了这个功能,它就会从 sys 模块中消失。

从至少Python 2.1的文档来看,这种情况是一直存在的,所以PyAnaconda使用这个方法其实是不合适的,我也不太明白它为什么会有用。

撰写回答