Python2到python3版本一个最大的最明显的区别就是python3支持中文了,对于python2经常遇到到那些坑人的编码问题来说,这一个大的改变是非常值个肯定的。而这基本的数据类型字符串在3版本中究竟做了什么样的改变呢?
首先我们来先说下python2的情况,python2使用的是ASCII码编码的,所以默认是不支持中文的,程序中有中文都不能正常的保存。但是可以在开头加上这句# -*- coding:utf-8 -*- 来设置程序的编码就可以了,当使用print输出中文时又发现有些能正常输出有些却是乱码,这时只要将不能正常输出的中文字符串前面加上’u’字母就可以了。到这里就已经引出了python2中的两种字符串类型,str和unicode,可以简单的理解为str是机器能识别的字符串,而unicode是我们能看懂的字符串,str可以解码(decode)成unicode,unicode可以编码(encode)成str。在idle的shell中中文会成’gbk’的编码,用什么编码就得用什么解码。
例,在python2中:
>>> a = '中文'
>>> a
'\xd6\xd0\xce\xc4'
>>> b = u'中文'
>>> b
u'\u4e2d\u6587'
>>> a.decode('gbk')
u'\u4e2d\u6587'
>>> b.encode('gbk')
'\xd6\xd0\xce\xc4'
>>>
在python3中使用的就是unicode国际编码,utf-8是unicode编码的一种形式,是支持中文的。Python3中的字符串有两种,str和bytes,这里str其实就是python2中的unicode,而bytes是python2中的str。所以这里的str可以编码(encode)成bytes,bytes可以解码(decode)成str。
例,在python3 中:
>>> a = '中文'
>>> a
'中文'
>>> a.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> b = b'\xe4\xb8\xad\xe6\x96\x87'
>>> b
b'\xe4\xb8\xad\xe6\x96\x87'
>>> b.decode ('utf-8')
'中文'
>>>