gpt4 book ai didi

python - 为什么我需要 'b' 来使用 Base64 对字符串进行编码?

转载 作者:IT老高 更新时间:2023-10-28 12:14:53 24 4
gpt4 key购买 nike

关注 python example ,我将字符串编码为 Base64:

>>> import base64
>>> encoded = base64.b64encode(b'data to be encoded')
>>> encoded
b'ZGF0YSB0byBiZSBlbmNvZGVk'

但是,如果我省略了前导 b:

>>> encoded = base64.b64encode('data to be encoded')

我收到以下错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python32\lib\base64.py", line 56, in b64encode
raise TypeError("expected bytes, not %s" % s.__class__.__name__)
TypeError: expected bytes, not str

这是为什么?

最佳答案

base64 编码采用 8 位二进制字节数据并仅使用字符 A-Za-z0-9 对其进行编码>+/*,因此它可以通过不保留所有 8 位数据的 channel 传输,例如电子邮件。

因此,它需要一个 8 位字节的字符串。您可以使用 b'' 语法在 Python 3 中创建它们。

如果你去掉b,它就会变成一个字符串。字符串是 Unicode 字符的序列。 base64 不知道如何处理 Unicode 数据,它不是 8 位的。事实上,它并不是真正的任何位。 :-)

在你的第二个例子中:

>>> encoded = base64.b64encode('data to be encoded')

所有字符都整齐地适合 ASCII 字符集,因此 base64 编码实际上有点毫无意义。您可以将其转换为 ascii,使用

>>> encoded = 'data to be encoded'.encode('ascii')

或者更简单:

>>> encoded = b'data to be encoded'

在这种情况下是一样的。


* 大多数 base64 风格还可能在末尾包含一个 = 作为填充。此外,一些 base64 变体可能使用 +/ 以外的字符。见 Variants summary table在 Wikipedia 上进行概述。

关于python - 为什么我需要 'b' 来使用 Base64 对字符串进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8908287/

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