gpt4 book ai didi

python - 为什么 base64.b64encode() 返回一个字节对象?

转载 作者:IT老高 更新时间:2023-10-28 22:15:29 26 4
gpt4 key购买 nike

base64.b64encode() 的目的是将二进制数据转换为 ASCII 安全的“文本”。但是,该方法返回一个字节类型的对象:

>>> import base64
>>> base64.b64encode(b'abc')
b'YWJj'

简单地获取该输出并 decode() 很容易,但我的问题是:base64.b64encode() 返回 bytes 的意义是什么 而不是 str?

最佳答案

The purpose of the base64.b64encode() function is to convert binary data into ASCII-safe "text"

Python 不同意这一点 - base64 已被故意归类为 binary transform .

强制分离字节和文本并禁止隐式转换是 Python 3 的设计决定。 Python 现在对此非常严格,以至于 bytes.encode 甚至都不存在,因此 b'abc'.encode('base64') 会引发 属性错误

该语言的观点是字节串对象是已经编码的。将字节编码为文本的编解码器不适合这种范式,因为当您想从字节域转到文本域时,它是 decode。请注意,rot13 编码也已从 standard encodings 列表中删除。出于同样的原因 - 它不适合 Python 3 范式。

还可以提出一个性能论点:假设 Python 自动处理 base64 输出的解码,这是由 binascii 中的 C 代码生成的 ASCII 编码二进制表示模块,放入文本域中的 Python 对象。如果你真的想要字节,你只需要通过再次编码为 ASCII 来撤销解码。这将是一次浪费的往返,一次不必要的双重否定。最好“选择加入”解码到文本的步骤。

关于python - 为什么 base64.b64encode() 返回一个字节对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42773386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com