两个版本都有两种字符串类型,用于存储二进制字节,Unicode字符。
python3相比于python2最大改变在于,python 3对文本和二进制数据作了更为清晰的区分,两者不可做任何隐式转化。
二进制字节 | unicode字符 | |
---|---|---|
python2 | str类型 | unicode类型 |
python3 | bytes类型 | str类型 |
一、字符串的编码发展历史
字符串的编码最一开始是ascii,使用8位二进制表示,因为英文就是编码的全部。后来其他国家的语言加入进来,ascii就不够用了,所以一种万国码就出现了,它的名字就叫unicode,unicode编码对所有语言使用两个字节,部分汉语使用三个字节。但是这就导致一个问题,就是unicode不仅不兼容ascii编码,而且会造成空间的浪费,于是uft-8编码应运而生了,utf-8编码对英文使用一个字节的编码,由于这样的特点,很快得到全面的使用。
二、 字节码bytes
python3中bytes用b’xxx’表示,其中的x可以用字符,也可以用ascii表示。python3中的二进制文件(如文本文件)统一采用字节码读写。
1. 字节码的使用举例
2 字节码的修改
要修改bytes中的某一个字节必须要将其转换为bytearray以后才可以。如下:
三、 字节码bytes与字符之间的关系
将表示二进制的bytes进行适当编码就可以变为字符了,比如utf-8或是gbk等等编码格式都可以。
在内存中,统一使用unicode编码,需要保存或者传输时,转换成UTF8编码。
四、字节码bytes与unicode字符的相互转换
python2可以隐式地将str类型(存储二进制字节)转换为unicode类型(存储unicode字符)
Python3不会以任意隐式的方式混用str类型(存储unicode字符)和bytes类型(存储二进制字节),正是这使得两者的区分特别清晰
不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。