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

新手上路,请多包涵
阅读 911
2 个回答

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

bytearray([来源[,编码[,错误]]])

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

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

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

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

如果是符合buffer接口的对象,会使用该对象的一个只读buffer来初始化bytes数组。

如果它是可迭代对象,则它必须是 0 <= x < 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) 并且对称性很好。

原文由 agf 发布,翻译遵循 CC BY-SA 4.0 许可协议

这比想象的要容易:

 my_str = "hello world"
my_str_as_bytes = str.encode(my_str)
print(type(my_str_as_bytes)) # ensure it is byte representation
my_decoded_str = my_str_as_bytes.decode()
print(type(my_decoded_str)) # ensure it is string representation

您可以通过打印类型来验证。请参阅下面的输出。

 <class 'bytes'>
<class 'str'>

原文由 hasanatkazmi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题