编码

py2编码

py3编码

 

默认编码

什么是默认编码?其实就是你的解释器解释代码时默认的编码方式,在py2里默认的编码方式是ASCII,在py3里则是utf8(sys.getdefaultencoding()查看)。

#-*- coding: UTF-8 -*-

这个声明是做什么的? 因为py2默认的ASCII码,对于中文这些特殊字符无法编码;声明这句话就是告诉python2.7解释器 (默认ACSII编码方式)解释hello.py文件声明下面的内容按utf8编码

 

1 cmd下的乱码问题

hello.py

#coding:utf8

print ('苑昊')

 

文件保存时的编码也为utf8。

思考:为什么在IDE下用2或3执行都没问题,在cmd.exe下3正确,2乱码呢?

我们在win下的终端即cmd.exe去执行,大家注意,cmd.exe本身就是一个软件;当我们python2 hello.py时,python2解释器(默认ASCII编码)去按声明的utf8编码文件,而文件又是utf8保存的,所以没问题;问题出在当我们print'苑昊'时,解释器这边正常执行,也不会报错,只是print的内容会传递给cmd.exe显示,而在py2里这个内容就是utf8编码的字节数据,而这个软件默认的编码解码方式是GBK,所以cmd.exe用GBK的解码方式去解码utf8自然会乱码。

py3正确的原因是传递给cmd的是unicode数据,符合ISO统一标准的,所以没问题。

print (u'苑昊')

改成这样后,cmd下用2也不会有问题了。 

 

2  print问题

在py2里

#coding:utf8
print ('苑昊') #苑昊
print (['苑昊','yuan']) #['\xe8\x8b\x91\xe6\x98\x8a', 'yuan']

 

在py3里

print ('苑昊') #苑昊
print (['苑昊','yuan']) #['苑昊', 'yuan']

posted on 2018-05-15 16:38  11wayne  阅读(109)  评论(0编辑  收藏  举报

导航