19.6. base64
— Base16,Base32,Base64,Base85数据编码¶
源代码: Lib/base64.py
此模块提供将二进制数据编码为可打印ASCII字符并将此类编码解码回二进制数据的功能。它为 RFC 3548 中指定的编码提供编码和解码功能,该编码定义了Base16,Base32和Base64算法,以及事实上标准的Ascii85和Base85编码。
RFC 3548 编码适合于编码二进制数据,以便它可以安全地通过电子邮件发送,用作URL的一部分,或作为HTTP POST请求的一部分。编码算法与 uuencode 程序不同。
此模块提供两个接口。现代接口支持将 字节状对象 编码为ASCII bytes
,以及解码 字节状对象 或包含ASCII到 bytes
的字符串。支持在 RFC 3548 (正常,以及URL和文件系统安全)中定义的base-64字母表。
传统接口不支持从字符串进行解码,但它提供了编码和解码来自 文件对象 的功能。它只支持Base64标准字母表,并根据 RFC 2045 每76个字符添加换行符。注意,如果你正在寻找 RFC 2045 支持,你可能想看看 email
包。
在 3.3 版更改: 现在接口的解码功能现在接受只有ASCII的Unicode字符串。
在 3.4 版更改: 任何 字节状对象 现在被该模块中的所有编码和解码功能接受。 Ascii85/Base85支持添加。
现代接口提供:
-
base64.
b64encode
(s, altchars=None)¶ 使用Base64编码 bytes-like object s 并返回编码的
bytes
。可选 altchars 必须是至少长度为2的 bytes-like object (忽略其他字符),它指定
+
和/
字符的替代字母表。这允许应用生成URL或文件系统安全的Base64字符串。默认值为None
,使用标准的Base64字母表。
-
base64.
b64decode
(s, altchars=None, validate=False)¶ 解码Base64编码的 bytes-like object 或ASCII字符串 s 并返回解码的
bytes
。可选 altchars 必须是至少长度为2的 bytes-like object 或ASCII字符串(忽略其他字符),它指定使用的替代字母表,而不是
+
和/
字符。如果 s 未正确填充,则会引发
binascii.Error
异常。如果 validate 是
False
(默认值),那么在填充检查之前,不会丢弃正常的base-64字母表或替代字母表中的字符。如果 validate 是True
,则输入中的这些非字母字符会导致binascii.Error
。
-
base64.
standard_b64encode
(s)¶ 使用标准的Base64字母表编码 bytes-like object s,并返回编码的
bytes
。
-
base64.
standard_b64decode
(s)¶ 使用标准Base64字母表解码 bytes-like object 或ASCII字符串 s,并返回解码的
bytes
。
-
base64.
urlsafe_b64encode
(s)¶ 使用URL和文件系统安全字母表对 bytes-like object s 进行编码,在标准Base64字母表中用
-
而不是+
和_
代替/
,并返回编码的bytes
。结果仍然可以包含=
。
-
base64.
urlsafe_b64decode
(s)¶ 使用URL和文件系统安全字母表解码 bytes-like object 或ASCII字符串 s,它替换
-
而不是标准Base64字母表中的+
和_
而不是/
,并返回解码的bytes
。
-
base64.
b32encode
(s)¶ 使用Base32编码 bytes-like object s 并返回编码的
bytes
。
-
base64.
b32decode
(s, casefold=False, map01=None)¶ 解码Base32编码的 bytes-like object 或ASCII字符串 s 并返回解码的
bytes
。可选 casefold 是指定小写字母表是否可接受为输入的标志。出于安全目的,默认值为
False
。RFC 3548 允许将数字0(零)可选地映射到字母O(oh),以及用于将数字1(一)可选地映射到字母I(眼)或字母L(el)。可选参数 map01 不是
None
时,指定数字1应映射到哪个字母(当 map01 不是None
时,数字0始终映射到字母O)。出于安全目的,默认值为None
,因此输入中不允许0和1。如果 s 未正确填充或输入中存在非字母字符,则会引发
binascii.Error
。
-
base64.
b16encode
(s)¶ 使用Base16编码 bytes-like object s 并返回编码的
bytes
。
-
base64.
b16decode
(s, casefold=False)¶ 解码Base16编码的 bytes-like object 或ASCII字符串 s 并返回解码的
bytes
。可选 casefold 是指定小写字母表是否可接受为输入的标志。出于安全目的,默认值为
False
。如果 s 未正确填充或输入中存在非字母字符,则会引发
binascii.Error
。
-
base64.
a85encode
(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False)¶ 使用Ascii85编码 bytes-like object b 并返回编码的
bytes
。foldspaces 是一个可选标志,它使用特殊短序列’y’,而不是由’btoa’支持的4个连续空格(ASCII 0x20)。 “标准”Ascii85编码不支持此功能。
wrapcol 控制输出是否应该添加新行(
b'\n'
)字符。如果这不是零,每个输出行将最多这个许多字符长。pad 控制在编码之前输入是否填充为4的倍数。注意,
btoa
实现总是垫。adobe 控制编码字节序列是否用
<~
和~>
构建,这是Adobe实现使用的。3.4 新版功能.
-
base64.
a85decode
(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\v')¶ 解码Ascii85编码的 bytes-like object 或ASCII字符串 b 并返回解码的
bytes
。foldspaces 是一个标志,指定’y’短序列是否应被接受为4个连续空格(ASCII 0x20)的缩写。 “标准”Ascii85编码不支持此功能。
adobe 控制输入序列是否为Adobe Ascii85格式(即用<~和~>框架)。
ignorechars 应为包含要从输入忽略的字符的 bytes-like object 或ASCII字符串。这应该只包含空格字符,并且默认包含ASCII中的所有空格字符。
3.4 新版功能.
-
base64.
b85encode
(b, pad=False)¶ 使用base85编码 bytes-like object b (如在git风格的二进制diffs中使用),并返回编码的
bytes
。如果 pad 为真,则输入使用
b'\0'
填充,因此在编码之前其长度为4个字节的倍数。3.4 新版功能.
-
base64.
b85decode
(b)¶ 解码base85编码的 bytes-like object 或ASCII字符串 b 并返回解码的
bytes
。如果需要,隐含地删除填充。3.4 新版功能.
注解
Base85和Ascii85都有5到4的扩展因子(5 Base85或Ascii85字符可以编码4个二进制字节),而更知名的Base64扩展因子为6到4.因此当空间昂贵时,它们更有效率。它们因细节(例如用于编码的字符映射)而不同。
传统接口:
-
base64.
decode
(input, output)¶ 解码二进制 input 文件的内容,并将生成的二进制数据写入 output 文件。 input 和 output 必须是 文件对象。 input 将被读取,直到
input.readline()
返回一个空字节对象。
-
base64.
decodebytes
(s)¶ -
base64.
decodestring
(s)¶ 解码 bytes-like object s,它必须包含一行或多行base64编码数据,并返回解码的
bytes
。decodestring
是已弃用的别名。3.1 新版功能.
-
base64.
encode
(input, output)¶ 编码二进制 input 文件的内容,并将生成的base64编码数据写入 output 文件。 input 和 output 必须是 文件对象。 input 将被读取,直到
input.read()
返回一个空字节对象。encode()
在每76个字节的输出之后插入一个换行符(b'\n'
),以及确保输出总是以换行符结束,如 RFC 2045 (MIME)。
-
base64.
encodebytes
(s)¶ -
base64.
encodestring
(s)¶ 编码 bytes-like object s,它可以包含任意二进制数据,并返回包含base64编码数据的
bytes
,在每76个字节的输出之后插入换行符(b'\n'
),并确保有一个尾随换行符,如 RFC 2045 (MIME) 。encodestring
是已弃用的别名。
模块的示例用法:
>>> import base64
>>> encoded = base64.b64encode(b'data to be encoded')
>>> encoded
b'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
b'data to be encoded'