首先明确一点,我们编辑好一段文本,python并不知道我们的文本是以什么格式编码的。如果是纯英文字符还好说,如果这段代码中有汉字,则会报错了。
所以我们要显式的告诉python此文本的编码格式。
为了说明问题,首先将以下测试代码以utf-8格式编辑保存
1 # -*- coding:utf-8 -*- #告知python我这个文件里的文本是用utf-8编码的 2 import time 3 4 a = ‘严‘ 5 print a#乱码,虽然python已经正确识别了a,但windows控制台使用gbk进行解码 6 b = unicode(‘严‘,‘utf-8‘).encode(‘gbk‘)#将严先解码为unicode格式,在编码为gbk格式 7 print b#正确显示严 8 c = a.decode(‘utf-8‘)#等效于c = unicode(‘严‘,‘utf-8‘),亦等效于c = u‘严‘ c是unicode格式的 9 print type(a),type(b),type(c)#a,b都是str类,c是unicode类 10 print c 11 time.sleep(4)
但是可能还有一个疑问,既然windows控制台使用gbk解码,为什么utf8的a是乱码,而unicode的b就不会是乱码呢?
因为Python在向控制台输出unicode对象的时候会自动根据输出环境的编码进行转换,这样就能正确解码了。但如果输出的不是unicode对象而是普通字符串,则不进行转换