setdefaultencoding函数利用详解
sys.getdefaultencoding()是配置默认的string的编码名目,假如你在python中举办编码息争码的时候,不指定编码方法,那么python就会利用defaultencoding。
而python2.x的的defaultencoding是ascii,这也就是大大都python编码报错:“UnicodeDecodeError: 'ascii' codec can't decode byte ……”的原因。
与此有雷同成果的# coding:utf-8 浸染是界说源代码的编码. 假如没有界说, 此源码中是不行以包括中文字符串的.
留意:python2.7今后setdefaultencoding就废弃掉了,所以在python3.x中不行利用
代码实例:
#!/usr/bin/env python #encoding: utf-8 import sys #引用sys模块进来,并不是举办sys的第一次加载 reload(sys) #从头加载sys sys.setdefaultencoding('utf8') ##挪用setdefaultencoding函数
可以正确的执行,但是下面的代码会堕落
#!/usr/bin/env python #encoding: utf-8 import sys sys.setdefaultencoding('utf8')
要在挪用setdefaultencoding时必需要先reload一次sys模块,因为这里的import语句其实并不是sys的第一次导入语句,也就是说这里其实大概是第二、三次举办sys模块的import,这里只是一个对sys的引用,只能reload才气举办从头加载。
那么为什么要从头加载,而直接引用过来则不能挪用该函数呢?因为setdefaultencoding函数在被系统挪用后被删除了,所以通过import引用进来时其实已经没有了,所以必需reload一次sys模块,这样setdefaultencoding才会为可用,才气在代码里修改表明器当前的字符编码。
在python安装目次的Lib文件夹下,有一个叫site.py的文件,在内里可以找到main() –> setencoding()–>sys.setdefaultencoding(encoding),因为这个site.py每次启动python表明器时会自动加载,所以main函数每次城市被执行,setdefaultencoding函数一出来就已经被删除了。