在这个python示例之后,我将字符串编码为Base64,其中:>>> import base64>>> encoded = base64.b64encode(b'data to be encoded')>>> encodedb'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为什么是这样?
3 回答
莫回无
TA贡献1865条经验 获得超7个赞
base64编码需要8位二进制字节数据和编码它仅使用字符A-Z,a-z,0-9,+,/*所以它可以在不保留任何数据,例如电子邮件的所有8位信道来传输。
因此,它需要一个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变体可能使用除+和之外的字符/。有关概述,请参阅Wikipedia上的Variants摘要表。
翻阅古今
TA贡献1780条经验 获得超5个赞
如果要编码的数据包含“异国情调”字符,我认为你必须编码为“UTF-8”
encoded = base64.b64encode (bytes('data to be encoded', "utf-8"))
添加回答
举报
0/150
提交
取消