18.12. base64 — RFC 3548:Base16,Base32,Base64 数据编码

此模块提供 RFC 3548中指定的数据编码和解码。该标准定义了用于将任意二进制字符串编码和解码为文本字符串的 Base16,Base32 和 Base64 算法,这些文本字符串可以pass电子邮件安全地发送,用作 URL 的一部分或作为 HTTP POST 请求的一部分。编码算法与 uuencode 程序不同。

此模块提供两个接口。现代界面支持使用在 RFC 3548中定义的 base-64 字母(正常,URL 和文件系统安全)来编码和解码字符串对象。旧版界面提供了与文件状对象以及字符串之间的编码和解码,但仅使用 Base64 标准字母。

在 Python 2.4 中引入的现代接口提供:

  • base64. b64encode(* s * [,* altchars *])
    • 使用 Base64 编码字符串。
  • s 是要编码的字符串。可选的 altchars *必须是长度至少为 2 的字符串(忽略其他字符),该字符串为+/字符指定替代字母。这允许应用程序例如生成 URL 或文件系统安全的 Base64 字符串。默认值为None,使用标准的 Base64 字母。

返回编码后的字符串。

  • base64. b64decode(* s * [,* altchars *])
    • 解码 Base64 编码的字符串。
  • s 是要解码的字符串。可选的 altchars *必须是长度至少为 2 的字符串(忽略其他字符),该字符串指定使用替代字母代替+/字符。

返回解码后的字符串。如果* s *错误填充,则引发TypeError。在填充检查之前,既不包含普通 base-64 字母也不包含替代字母的字符都将被丢弃。

  • base64. standard_b64encode(* s *)

    • 使用标准 Base64 字母对字符串* s *进行编码。
  • base64. standard_b64decode(* s *)

    • 使用标准 Base64 字母解码字符串* s *。
  • base64. urlsafe_b64encode(* s *)

    • 使用安全于 URL 和文件系统的字母对字符串* s *进行编码,该字母在标准 Base64 字母中用-代替+_代替/。结果仍然可以包含=
  • base64. urlsafe_b64decode(* s *)

    • 使用 URL 和文件系统安全字母对字符串* s *进行解码,该字母在标准 Base64 字母中用-代替+_代替/
  • base64. b32encode(* s *)

    • 使用 Base32 编码字符串。 * s *是要编码的字符串。返回编码后的字符串。
  • base64. b32decode(* s * [,* casefold * [,* map01 *]])

    • 解码 Base32 编码的字符串。
  • s 是要解码的字符串。可选的 casefold *是一个标志,指定是否可以接受小写字母作为 Importing。为了安全起见,默认值为False

RFC 3548允许将数字 0(零)Map 到字母 O(哦),并允许将数字 1(一个)Map 到字母 I(眼睛)或字母 L(el)。可选参数* map01 如果不是None,则指定数字 1 应该 Map 到哪个字母(当 map01 *不是None时,数字 0 总是 Map 到字母 O)。为了安全起见,默认值为None,因此 Importing 中不允许使用 0 和 1.

返回解码后的字符串。如果错误地填充* s *或字符串中存在非字母字符,则引发TypeError

  • base64. b16encode(* s *)
    • 使用 Base16 编码字符串。
  • s *是要编码的字符串。返回编码后的字符串。
  • base64. b16decode(* s * [,* casefold *])
    • 解码 Base16 编码的字符串。
  • s 是要解码的字符串。可选的 casefold *是一个标志,指定是否可以接受小写字母作为 Importing。为了安全起见,默认值为False

返回解码后的字符串。如果错误地填充* s *或字符串中存在非字母字符,则引发TypeError

旧版界面:

  • base64. decode(* input output *)

    • 解码* input 文件的内容,并将生成的二进制数据写入 output *文件。 * input output *必须是文件对象或模仿文件对象接口的对象。 * input *将被读取,直到input.read()返回一个空字符串。
  • base64. decodestring(* s *)

    • 解码字符串* s *,该字符串必须包含一行或多行 base64 编码的数据,然后返回包含结果二进制数据的字符串。
  • base64. encode(* input output *)

    • 对* input 文件的内容进行编码,并将生成的 base64 编码数据写入 output *文件。 * input output *必须是文件对象或模仿文件对象接口的对象。 * input *将被读取,直到input.read()返回一个空字符串。 encode()返回编码的数据以及结尾的换行符('\n')。
  • base64. encodestring(* s *)

    • 对字符串* s *进行编码,该字符串可以包含任意二进制数据,然后返回一个字符串,其中包含一或多行以 base64 编码的数据。 encodestring()返回一个字符串,该字符串包含一行或多行以 base64 编码的数据,该数据始终包含一个额外的尾随换行符('\n')。

该模块的示例用法:

>>> import base64
>>> encoded = base64.b64encode('data to be encoded')
>>> encoded
'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
'data to be encoded'

See also

  • Module binascii

  • 支持模块,包含 ASCII 到二进制和二进制到 ASCII 转换。

  • RFC 1521-MIME(多用途 Internet 邮件扩展),第 1 部分:指定和描述 Internet 邮件正文格式的机制

  • 第 5.2 节“ Base64 Content-Transfer-Encoding”提供了 base64 编码的定义。