“Python编码声明”的版本间的差异
跳到导航
跳到搜索
docker>Evan (→系统编码) |
小 (导入1个版本) |
2019年10月14日 (一) 13:52的最新版本
#-*- 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模块