python增加了一个类型:bytes,它表达二进制数据。
在 3.x 中,字符串和二进制数据完全区分开。
文本总是 Unicode,由 str 类型表示,二进制数据则由 bytes 类型表示。
Python 3 不会以任意隐式的方式混用 str 和 bytes,你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)。
bytes 对象只负责以字节(二进制格式)序列来记录数据,至于这些数据到底表示什么内容,完全由程序决定。如果采用合适的字符集,字符串( str)可以转换成字节串(bytes);反过来,字节串(bytes)也可以恢复成对应的字符串(str)。
由于 bytes 保存的就是原始的字节(二进制格式)数据,因此 bytes 对象可用于在网络上传输数据,也可用于存储各种二进制格式的文件,比如图片、音乐等文件。
bytes 类型与 str 类型,二者的方法仅有 encode() 和 decode() 不同。
bytes 类型数据需在常规的 str 类型前加个 b 以示区分,例如 b'abc'。
只有在需要将 str 编码(encode)成 bytes 的时候,比如:通过网络传输数据;或者需要将 bytes 解码(decode)成 str 的时候,我们才会关注 str 和 bytes 的区别。
str转换为bytes时,最好使用它的encode()方法。
bytes转换为str时,最好使用它的decode()方法。
因为不需要使用参数。
也可以使用函数str()将bytes转换为str,使用函数bytes将str转换为bytes,但是函数需要参数,特别是编码参数。没有前面的方法简便。
str->bytes用encode(); bytes->str用decode()
怎么记住,不至于记反呢?
注意:encode是编码,decode是解码。
在电报中,编码是将可读的转换为不可读的,用于发送;而解码是将不可读的电文转换为可读的文字。
str是可读的,bytes是不可读的。这样就可以记住了。
一、bytes 转 str
方法1:使用bytes的decode()方法。最好用这个方法。
例1:
>>>t=b'abc'
>>>a=t.decode()
>>>type(a)
<class 'str'>
>>>print(a)
abc
例2:
>>>t='中国'.encode()
>>>a=t.decode()
>>>type(a)
<class 'str'>
>>>print(a)
中国
方法2:使用str()函数
例1:
>>>t=b‘abc'
>>>a=str(t,'ascii')
>>>type(a)
<class 'str'>
>>>print(a)
abc
例2:
>>>t=bytes('中国','utf-8')
>>>a=str(t,'utf-8')
>>>type(a)
<class 'str'>
>>>print(a)
中国
二、str 转 bytes
方法1:使用str的encode()方法。最好用这个方法。
例1:
>>>a='abc'
>>>t=a.encode()
>>>type(t)
<class 'bytes'>
例2:
>>>b='中国'
>>>s=b.encode()
>>>type(s)
<class 'bytes'>
方法2:使用bytes()函数
例1:
>>>a='abc'
>>>t=bytes(a,'ascii')
>>>type(t)
<class 'bytes'>
例2:
>>>a='中国'
>>>t=bytes(a,'utf-8')
>>>type(t)
<class 'bytes'>
网友评论