Python 两个版本中字符串的区别

      Python2python3版本一个最大的最明显的区别就是python3支持中文了,对于python2经常遇到到那些坑人的编码问题来说,这一个大的改变是非常值个肯定的。而这基本的数据类型字符串在3版本中究竟做了什么样的改变呢?

      首先我们来先说下python2的情况,python2使用的是ASCII码编码的,所以默认是不支持中文的,程序中有中文都不能正常的保存。但是可以在开头加上这句# -*- coding:utf-8 -*- 来设置程序的编码就可以了,当使用print输出中文时又发现有些能正常输出有些却是乱码,这时只要将不能正常输出的中文字符串前面加上’u’字母就可以了。到这里就已经引出了python2中的两种字符串类型,strunicode,可以简单的理解为str是机器能识别的字符串,而unicode是我们能看懂的字符串,str可以解码(decode)成unicodeunicode可以编码(encode)成str。在idleshell中中文会成’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-8unicode编码的一种形式,是支持中文的。Python3中的字符串有两种,strbytes,这里str其实就是python2中的unicode,而bytespython2中的str。所以这里的str可以编码(encode)成bytesbytes可以解码(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')

'中文'

>>> 

猜你喜欢

转载自blog.csdn.net/python_huohuo/article/details/72677545