Python编码声明
跳转到导航
跳转到搜索
#-*- coding:utf-8 -*-
系统编码
系统编码
前面说了,Python根据电脑默认的locale设置将字节转化成字符.那如何获得系统的默认编码:
import sys
print sys.getdefaultencoding()
ascii
更改系统的默认编码:
import sys
reload(sys)
sys.setdefaultencoding('utf8')
为什么要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来设置系统编码.
In [22]: import sys
In [23]: print sys.getdefaultencoding()
ascii
In [16]: import sys
...: reload(sys)
...: sys.setdefaultencoding('utf8')
...:
In [17]: dic["城市"]
Out[17]: '\xe5\xb9\xbf\xe5\xb7\x9e\xe5\xa4\xa9\xe6\xb2\xb3\xe5\x8c\xba'
In [18]: print dic["城市"]
广州天河区
字典中有中文时 要print 才能显示出来,如果是py3却是可以直接显示的
In [18]: tel = {'jack': '我', 'sape': 4139}
In [19]: tel
Out[19]: {'jack': '\xe6\x88\x91', 'sape': 4139}
In [20]: tel['jack']
Out[20]: '\xe6\x88\x91'
In [21]: print tel['jack']
我
但是写在文件 就如那个天气预报 就当是utf-8 的问题吧 烦死
如果是py3就可以直接显示
In [7]: tel = {'jack': '我', 'sape': 4139}
In [8]: tel['jack']
Out[8]: '我'
参考
PEP 263 -- Defining Python Source Code Encodings
Python 字典中的中文输出问题import json模块