“Python编码声明”的版本间的差异

来自linux中国网wiki
跳到导航 跳到搜索
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]: '我'

参考

Python处理utf8编码中文,及打印中文列表和字典

PEP 263 -- Defining Python Source Code Encodings

Python编码声明

Python 字典中的中文输出问题import json模块


Python3 是如何解决棘手的字符编码问题的

关于Python的默认字符集

Python读写utf-8的文本文件

python文件编码说明 coding=utf-8

python #coding 和 setdefaultencoding的区别

Python-中文编码

Python 编码

怎么在Python里使用UTF-8编码

修改python默认的编码方式

立即停止使用 setdefaultencoding('utf-8')