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

时间:2011-08-18 09:46:58

标签: python encoding default

  

可能重复:
  Changing default encoding of python?

我正在阅读潜入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

2 个答案:

答案 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。