如何在Python中设置默认编码(setdefaultencoding()函数不存在)?
可能重复的问题:
如何更改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 个回答
怎么设置默认编码呢?
在 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 编码。
Python的 sys
模块自从2.0版本就有一个叫做 setdefaultencoding
的功能。不过,
这个功能其实是专门给网站模块用的,其他地方用到的机会不多。一旦网站模块使用了这个功能,它就会从
sys
模块中消失。
从至少Python 2.1的文档来看,这种情况是一直存在的,所以PyAnaconda使用这个方法其实是不合适的,我也不太明白它为什么会有用。