为什么在sys.setdefaultencoding之前要写reload(sys)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么在sys.setdefaultencoding之前要写reload(sys)相关的知识,希望对你有一定的参考价值。

为什么在sys.setdefaultencoding之前要写reload(sys)

python 中获得系统默认编码为:

import sys

print sys.getdefaultencoding()


而修改系统默认编码应写为:

import sys

reload(sys)

sys.setdefaultencoding(‘UTF-8‘) #可以写成utf-8!

为什么需要一个看似多余的reload(sys)呢?

先看下python的模块加载过程:


# python -v

# installing zipimport hook

import zipimport # builtin

# installed zipimport hook

# /usr/local/lib/python2.6/site.pyc matches /usr/local/lib/python2.6/site.py

import site # precompiled from /usr/local/lib/python2.6/site.pyc

....

Python运行的时候首先加载了site.py,在site.py文件里有这么一段代码:

if hasattr(sys, "setdefaultencoding"):

    del sys.setdefaultencoding

在sys加载后,setdefaultencoding方法被删除了,所以我们要通过重新导入sys来设置系统编码。






本文出自 “圣骑士控魔之手” 博客,请务必保留此出处http://wutengfei.blog.51cto.com/10942117/1983533

以上是关于为什么在sys.setdefaultencoding之前要写reload(sys)的主要内容,如果未能解决你的问题,请参考以下文章

你在为什么烦恼着

@transactional注解在什么情况下会失效,为什么。

为什么说invalidate()不能直接在线程中调用

为什么我们不能在堆栈上分配动态内存?

为什么敏捷开发在亚洲实行不了

问题:为什么在我为孩子设置状态时,React为什么更新我的父母?仅发生在数组