bytes
bytes对象只负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式解码所决定
bytes是Python 3中特有的,Python 2 里不区分bytes和str。
python3中:
str 使用encode方法转化为 bytes
bytes通过decode转化为str
>>> a = '人生苦短'
>>> type(a)
<class 'str'>
>>> b = a.encode()
>>> b
b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad'
>>> type(b)
<class 'bytes'>
>>> c = b.decode()
>>> c
'人生苦短'
>>> type(c)
<class 'str'>
在Python 2中由于不区分str和bytes所以可以直接通过encode()和decode()方法进行编码解码。
而在Python 3中把两者给分开了这个在使用中需要注意。实际应用中在互联网上是通过二进制进行传输,所以就需要将str转换成bytes进行传输,而在接收中通过decode()解码成我们需要的编码进行处理数据这样不管对方是什么编码而本地是我们使用的编码这样就不会乱码。
bytearray() 方法返回一个新字节数组。
这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。
语法:class bytearray([source[, encoding[, errors]]])
参数:
- 如果 source 为整数,则返回一个长度为 source 的初始化数组;
bytearray(2)
bytearray(b'\x00\x00')
- 如果 source 为字符串,则按照指定的 encoding 将字符串转换为字节序列;
>>> c = bytearray('中文','utf-8')
>>> type(c)
<class 'bytearray'>
- 如果 source 为可迭代类型,则元素必须为[0 ,255] 中的整数;
>>> bytearray([1,2,3,4])
bytearray(b'\x01\x02\x03\x04')
>>> bytearray([1,2,3,4,899])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: byte must be in range(0, 256)
- 如果 source 为与 buffer 接口一致的对象,则此对象也可以被用于初始化 bytearray。
- 如果没有输入任何参数,默认就是初始化数组为0个元素。
>>> a = bytearray()
>>> a
bytearray(b'')
>>> len(a)
0