在这个python示例之后,我使用以下代码将字符串编码为Base64:
>&燃气轮机&燃气轮机;导入base64
&燃气轮机&燃气轮机&燃气轮机;encoded=base64.b64encode(b‘要编码的数据’)
&燃气轮机&燃气轮机&燃气轮机;编码的
b'ZGF0YSB0byBiZSBlbmNvZGVk'
但是,如果我省略了前面的b:
>&燃气轮机&燃气轮机;encoded=base64.b64encode(‘要编码的数据’)
我得到以下错误:
回溯(最后一次调用):
文件“<;stdin>;”,第1行,在<;模块>;
文件“C:\Python32\lib\base64.py”,第56行,b64encode
raise TypeError(“应为字节,而不是%s”%s.\u类\u名称\u)
TypeError:应为字节,而不是str
为什么会这样
base64编码采用8位二进制字节数据并进行编码。它只使用字符A-Z,A-Z,0-9,+,/*以便通过不保留所有8位数据的通道(如电子邮件)传输
因此,它需要一个8位字节的字符串。您可以使用b''语法在Python3中创建它们
如果删除b,它将成为一个字符串。字符串是Unicode字符序列。base64不知道如何处理Unicode数据,它不是8位的。事实上,这并不是什么零碎的东西。:-)
在第二个示例中:
>&燃气轮机&燃气轮机;encoded=base64.b64encode(‘要编码的数据’)
所有字符都整齐地适合ASCII字符集,因此base64编码实际上有点毫无意义。您可以使用
>&燃气轮机&燃气轮机;encoded='要编码的数据'.encode('ascii')
或更简单:
>&燃气轮机&燃气轮机;encoded=b“待编码数据”
在这种情况下也是一样的
*大多数base64口味也可能在末尾添加一个=作为填充物。此外,某些base64变体可能使用除+和/以外的字符。请参阅Wikipedia上的变体摘要表以了解概述