总结总结,本文仅适用于python2.xpython
首先是开头的地方声明编码windows
# coding: utf8运维
这个东西的用处是声明文件编码为utf8(要写在前两行内),否则文件里若是有中文,好比编码
a = '美丽' b = u'美丽'
中任何一种,运行前就会提示你SyntaxError
,Non-ASCII character... 之类,由于python2.x的文件编码默认使用万恶的ascii
开头加上那句默认编码声明就会变成utf8
,获取当前的默认编码code
sys.getdefaultencoding()
在python中,使用unicode类型做为编码的基础类型,编解码要以其为中间形式过渡,即进行str
和unicode
之间的转换。
解码而后再编码的过程,即str
->unicode
->str
的过程。中间获得的叫作unicode对象对象
这里须要强调的是unicode
是一种字符编码方法,是 “与存储无关的表示”,而utf8
是一种以unicode
进行编码的计算机二进制表示,或者说传输规范。gbk,gb2312,gb18030, utf8等属于不一样的字符集,转换编码就是在它们中的任意二者间进行。utf-8
具体的转换,好比直接将一个字符串encode成另外一种字符集表示,注意此处是字符串,即type
为str
的,引号前没有加u
前缀的ci
# coding: utf8 s='美丽' s.encode('gbk')
则实际上会先以默认编码进行decode
,即decode('ascii')
,开头声明了utf8,s
的编码就是utf8
,ascii解码不了utf8
的字符会报错。那就改默认编码,unicode
# coding: utf8 import sys reload(sys) sys.setdefaultencoding('utf-8') s='美丽' s.encode('gbk')
这样把默认编码改为utf8,decode
的时候就以默认编码utf8来进行,可以成功运行字符串
或者decode
时指定类型,
# coding: utf8 import sys s='美丽' s.decode('utf8').encode('gbk')
对于type
为unicode
的,即加了u
前缀的字符串,如上所说,直接encode
便可
# coding: utf8 import sys s = u'美丽' s.encode('gbk')
这又是另外一个让人困惑的地方——控制台的编码致使的乱码问题甚至是报错。通常我的用的电脑上控制台基本上都是utf8
编码的,但运维的机器上基本全是ascii
,print中文的时候就会有酸爽的问题。乱码问题通常发生在windows
下面,由于那个编码的字符集很不同凡响。因此当以正确方式编解码之后,仍是出现问题,那问题极可能就出在控制台上了