为什么我需要“b”来用Base64编码字符串?

在这个python示例之后,我使用以下代码将字符串编码为Base64:

&gt&燃气轮机&燃气轮机;导入base64
&燃气轮机&燃气轮机&燃气轮机;encoded=base64.b64encode(b‘要编码的数据’)
&燃气轮机&燃气轮机&燃气轮机;编码的
b'ZGF0YSB0byBiZSBlbmNvZGVk'

但是,如果我省略了前面的b

&gt&燃气轮机&燃气轮机;encoded=base64.b64encode(‘要编码的数据’)

我得到以下错误:

回溯(最后一次调用):
文件“<stdin>”,第1行,在<模块>
文件“C:\Python32\lib\base64.py”,第56行,b64encode
raise TypeError(“应为字节,而不是%s”%s.\u类\u名称\u)
TypeError:应为字节,而不是str

为什么会这样

base64编码采用8位二进制字节数据并进行编码。它只使用字符A-ZA-Z0-9+/*以便通过不保留所有8位数据的通道(如电子邮件)传输

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

如果删除b,它将成为一个字符串。字符串是Unicode字符序列。base64不知道如何处理Unicode数据,它不是8位的。事实上,这并不是什么零碎的东西。:-)

在第二个示例中:

&gt&燃气轮机&燃气轮机;encoded=base64.b64encode(‘要编码的数据’)

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

&gt&燃气轮机&燃气轮机;encoded='要编码的数据'.encode('ascii')

或更简单:

&gt&燃气轮机&燃气轮机;encoded=b“待编码数据”

在这种情况下也是一样的


*大多数base64口味也可能在末尾添加一个=作为填充物。此外,某些base64变体可能使用除+/以外的字符。请参阅Wikipedia上的变体摘要表以了解概述

发表评论