在Python 3.6中,base64.b64encode()需要一个类似字节的对象,而不是'str'
与普通字符串相比,类似字节的对象的示例是什么?
答案 0 :(得分:3)
逻辑上存储一系列字节的任何内容都符合条件。其中包括实际的bytes
类型,bytearray
,mmap.mmap
,array.array('B')
等.Python 3中的str
是文本类型;字符不存储在指定的编码中,因此您不能直接将它们用作原始二进制数据;它们必须encode
- 明确使用特定编码。
有关技术定义,请参阅Python 3 glossary:
支持缓冲区协议并可以导出C连续缓冲区的对象。这包括所有
bytes
,bytearray
和array.array
对象,以及许多常见的memoryview
对象。类字节对象可用于处理二进制数据的各种操作;这些包括压缩,保存到二进制文件,以及通过套接字发送。某些操作需要二进制数据是可变的。文档通常将这些称为“读写字节类对象”。示例可变缓冲区对象包括
bytearray
和memoryview
的{{1}}。其他操作要求将二进制数据存储在不可变对象中(“只读字节对象”);这些示例包括bytearray
对象的bytes
和memoryview
。