python3.x也有两种数据类型,str和bytes;str类型存unicode数据,bytes类型存bytes数据,
python3.x将utf-8或者gbk等编码的字节数据转化为python3.x的str类型,utf-8编码的bytes<–>str
python2.x将utf-8或者gbk等编码的字节数据转化为python2.x的unicode类型,utf-8编码的str<–>unicode
python3.x的编码思想就是它清晰的将文本和二进制区分开了,不会对bytes字节进行自动编码。文本总是unicode,由str类型表示,二进制数据则由bytes类型表示,Python 3不会以任意隐式的方式混用str和bytes,将两者明确地区分开。基于此,Python3中不能拼接字符串和字节包,也不可以在字节包里搜索字符串(反之亦然),也不能向使用字符串参数的函数中传入字节包参数(反之亦然)。
python3 执行代码的过程
1.解释器找到代码文件,把代码字符串按文件头定义的编码加载到内存,转成unicode
2.把代码字符串按照语法规则进行解释,
3.所有的变量字符都会以unicode编码声明
######在python2.x#######
print(b'hello'+'world')
会输出
helloworld
######在python3.x#######
print(b'hello'+'world')
会输出
TypeError: can't concat str to bytes