在Python 3中将字符串转换为字节的最佳方式?

问题:

似乎有两种不同的方法将字符串转换为字节,如TypeError: ‘str’ does not support the buffer interface的答案所示
哪些方法会更好还是更好?还是只是个人偏好的问题?

b = bytes(mystring, 'utf-8')

b = mystring.encode('utf-8')

回答:

如果您查看bytes的文档,它会指向bytearray

bytearray(]])
返回一个新的字节数组。 bytearray类型是0 <= x <256的整数的可变序列。它具有可变序列类型中描述的可变序列的大多数常用方法,以及字节类型具有的大多数方法,请参见Bytes和字节数组方法。 可选的源参数可用于以几种不同的方式初始化数组:  如果是字符串,还必须给出编码(和可选的错误)参数; bytearray()然后使用str.encode()将字符串转换为字节。
 如果它是一个整数,数组将具有该大小,并且将以空字节初始化。
 如果是符合缓冲区接口的对象,则将使用对象的只读缓冲区来初始化字节数组。
 如果它是可迭代的,则它必须是0 <= x <0的整数的可迭代。 256,它们被用作数组的初始内容。
 没有参数,将创建一个大小为0的数组。

所以bytes可以做的不仅仅是编码一个字符串。它是Pythonic,它将允许您使用任何类型的源参数调用构造函数。
对于编码一个字符串,我认为some_string.encode(encoding)比使用构造函数更具有Pythonic,因为它是最自我的文档 – “使用这个字符串并用这个编码进行编码”比bytes(some_string, encoding)更清晰 – 没有当您使用构造函数时显式动词。
 编辑:我检查了Python源码。如果您使用CPython将unicode字符串传递给bytes,则调用PyUnicode_AsEncodedString,即encode的实现;所以如果你自己打电话给你encode,你只是跳过一个间接级别。
另外,请参阅Serdalis的评论 – unicode_string.encode(encoding)也更多的是Pythonic,因为它的倒数是byte_string.decode(encoding),对称性很好。

 
 Code问答: codewenda.com
Stackoverflow:Best way to convert string to bytes in Python 3?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 72 = 73