小编典典

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

python

在此python示例之后,我使用以下代码将字符串编码为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

为什么是这样?


阅读 210

收藏
2020-12-20

共1个答案

小编典典

Base64编码需要8位二进制字节数据和编码它仅使用字符A-Za-z0-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口味=的末尾也可能包含a作为填充物。此外,某些base64变体可能使用+和以外的字符/。有关概述,请参见Wikipedia的“变体”摘要表

2020-12-20