小编典典

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

all

似乎有两种不同的方法可以将字符串转换为字节,如答案所示:’str’ does not support the buffer
interface

这些方法中的哪一个会更好或更 Pythonic?还是只是个人喜好问题?

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

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

阅读 133

收藏
2022-02-25

共1个答案

小编典典

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

字节数组([源[,编码[,错误]]])

返回一个新的字节数组。bytearray 类型是 0 <= x < 256
范围内的可变整数序列。它具有可变序列的大多数常用方法,在可变序列类型中描述,以及字节类型具有的大多数方法,请参见字节和字节数组方法。

可选的源参数可用于以几种不同的方式初始化数组:

如果是字符串,还必须提供编码(以及可选的错误)参数; bytearray() 然后使用 str.encode() 将字符串转换为字节。

如果它是一个整数,则该数组将具有该大小,并将使用空字节进行初始化。

如果是符合缓冲区接口的对象,将使用该对象的只读缓冲区来初始化字节数组。

如果是可迭代的,则必须是 0 <= x < 256 范围内的整数的可迭代,用作数组的初始内容。

如果没有参数,则会创建一个大小为 0 的数组。

所以bytes可以做的不仅仅是编码一个字符串。它是 Pythonic,它允许您使用任何有意义的源参数类型调用构造函数。

对于字符串的编码,我认为这some_string.encode(encoding)比使用构造函数更
Pythonic,因为它是最自我记录的——“获取这个字符串并用这个编码对其进行编码”比bytes(some_string, encoding)——当你使用构造函数。

我检查了 Python 源代码。如果您将 unicode 字符串传递给bytes使用
CPython,它会调用PyUnicode_AsEncodedString,这是
; 的实现encode。所以如果你打电话给encode自己,你只是跳过了一个间接级别。

另外,请参阅 Serdalis 的评论 -unicode_string.encode(encoding)也更
Pythonic,因为它的逆是byte_string.decode(encoding)并且对称性很好。

2022-02-25