在此python示例之后,我使用以下代码将字符串编码为Base64:
>>> import base64 >>> encoded = base64.b64encode(b'data to be encoded') >>> encoded b'ZGF0YSB0byBiZSBlbmNvZGVk'
但是,如果我忽略了领导b:
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-Z,a-z,0-9,+,/*所以它可以在不保留任何数据的所有8位,例如电子邮件信道来传输。
A-Z
a-z
0-9
+
/
因此,它需要一个8位字节的字符串。您可以使用以下b''语法在Python 3中创建它们。
b''
如果删除b,它将成为一个字符串。字符串是Unicode字符序列。base64不知道如何处理Unicode数据,它不是8位的。实际上,它实际上一点也不。:-)
在第二个示例中:
所有字符都完全适合ASCII字符集,因此base64编码实际上是毫无意义的。您可以将其转换为ascii
>>> encoded = 'data to be encoded'.encode('ascii')
或更简单:
>>> encoded = b'data to be encoded'
在这种情况下,这将是同一件事。
*大多数base64口味=的末尾也可能包含a作为填充物。此外,某些base64变体可能使用+和以外的字符/。有关概述,请参见Wikipedia的“变体”摘要表。
=