fea*_*ool 8 utf-8 utf python-3.x
我想了解 python3bytes和bytearray类。我看过关于它们的文档,但没有全面描述它们的差异以及它们如何与string对象交互。
fea*_*ool 14
python3'sbytes和bytearrayclasses 都保存字节数组,其中每个字节可以采用 0 到 255 之间的值。主要区别在于bytes对象是不可变的,这意味着一旦创建,就不能修改其元素。相比之下,bytearray对象允许您修改其元素。
bytes 和编码字节对象可以通过几种不同的方式构造:
>>> bytes(5)
b'\x00\x00\x00\x00\x00'
>>> bytes([97, 98, 99])
b'abc'
>>> b'abc'
b'abc'
>>> bytes('abc')
TypeError: string argument without an encoding
>>> 'abc'.encode('utf-8')
b'abc'
>>> bytes('abc', 'utf-8')
b'abc'
>>> 'abc'.encode('utf-16')
b'\xff\xfea\x00b\x00c\x00'
>>> 'abc'.encode('utf-16-le')
b'a\x00b\x00c\x00'
Run Code Online (Sandbox Code Playgroud)
请注意最后两个之间的区别:'utf-16' 指定通用 utf-16 编码,因此其编码形式包括[0xff, 0xfe]. 当在后面的例子中指定 'utf-16-le' 的显式排序时,编码形式省略了字节顺序标记。
由于字节对象是不可变的,因此尝试更改其元素之一会导致错误:
>>> a = bytes('abc', 'utf-8')
>>> a
b'abc'
>>> a[1] = 102
TypeError: 'bytes' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)
像 一样bytes,可以通过多种方式构造字节数组:
>>> bytearray(5)
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00')
>>>bytearray([1, 2, 3])
bytearray(b'\x01\x02\x03')
>>> bytearray('abc')
TypeError: string argument without an encoding
>>> bytearray('abc', 'utf-8')
bytearray(b'abc')
>>> bytearray('abc', 'utf-16')
bytearray(b'\xff\xfea\x00b\x00c\x00')
>>> bytearray('abc', 'utf-16-le')
bytearray(b'a\x00b\x00c\x00')
Run Code Online (Sandbox Code Playgroud)
因为 bytearray 是mutable,你可以修改它的元素:
>>> a = bytearray('abc', 'utf-8')
>>> a
bytearray(b'abc')
>>> a[1]=114
>>> a
bytearray(b'arc')
Run Code Online (Sandbox Code Playgroud)
bytes和bytearray对象可以用 + 运算符连接:
>>> a = bytes(3)
>>> a
b'\x00\x00\x00'
>>> b = bytearray(4)
>>> b
bytearray(b'\x00\x00\x00\x00')
>>> a+b
b'\x00\x00\x00\x00\x00\x00\x00'
>>> b+a
bytearray(b'\x00\x00\x00\x00\x00\x00\x00')
Run Code Online (Sandbox Code Playgroud)
请注意,连接的结果采用第一个参数的类型,因此a+b生成一个bytes对象并b+a生成一个bytearray.
bytes 和 bytearray 对象可以使用该decode函数转换为字符串。该函数假定您提供与编码类型相同的解码类型。例如:
>>> a = bytes('abc', 'utf-8')
>>> a
b'abc'
>>> a.decode('utf-8')
'abc'
>>> b = bytearray('abc', 'utf-16-le')
>>> b
bytearray(b'a\x00b\x00c\x00')
>>> b.decode('utf-16-le')
'abc'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3771 次 |
| 最近记录: |