我正在阅读潜入python ,它提到在XML解析章节中设置python的默认编码方案。
setdefaultencoding 用于 python-installed-dir / 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
答案 0 :(得分:8)
Python的sys
模块自Python 2.0以来就有setdefaultencoding
函数。然而,
此功能仅供站点模块实现使用,并在需要时由sitecustomize使用。一旦站点模块使用它,它将从sys模块的命名空间中删除。
回到Python 2.1的文档表明这种情况发生了,因此PyAnaconda永远不适合使用这种方法,而且我不确定它为什么会有效。
答案 1 :(得分:7)
无论如何设置默认编码?
在文件sys.setdefaultencoding
中运行sitecustomize.py
,当Python启动时,该文件需要在sys.path中(例如lib / site-packages)。您可以使用sys.getdefaultencoding
验证更改。
编辑匿名downvoter:
无论是谁对这个答案进行了贬低,你都会解释一下吗?这个问题仅适用于Python 2.x.如果这是你的问题,Python 3中没有sys.setdefaultencoding
。如果想要在Python 2中使用,我会支持我对如何使用此函数的解释。我没有捍卫它的使用或推荐它的使用。库应该永远不会触及它,这就是在site.py和sitecustomize.py有机会调用它之后将其从sys
命名空间中删除的原因。库也应该永远不要假设2.x中的默认编码是ASCII。这取决于系统。我个人将其保留为ASCII。