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字节
,以及将类字节对象或包含ASCII的字符串解码为字节
。RFC 3548中定义的两个基本64字母表(普通字母表,和URL及文件系统安全的字母表)都支持。
传统接口不支持从字符串进行解码,但它提供从文件对象编码和解码的功能。它仅支持Base64标准字母表,并根据 RFC 2045每76个字符添加换行符。请注意,如果你要查找 RFC 2045支持,你可能希望查看email
包。
在版本3.3中更改:现代接口的解码函数现在接受ASCII-only的Unicode字符串。
在版本3.4中更改:现在此模块中的所有编码和解码函数接受任何类字节对象。添加对Ascii85/Base85的支持。
现代接口提供:
base64.
b64encode
(s, altchars=None)¶可选的altchars必须是一个类字节对象,长度至少为2(忽略其他字符),它指定
+
和/
字符的替代字母。这允许应用生成URL或文件系统安全的Base64字符串。默认值为None
,使用标准的Base64字母表。
base64.
b64decode
(s, altchars=None, validate=False)¶解码Base64编码的类字节对象或ASCII字符串s并返回解码的
字节
。可选的altchars必须是一个类字节对象,长度至少为2(忽略其他字符),它指定
+
和/
字符的替代字母。如果s未正确填充,则引发
binascii.Error
异常。如果validate是
False
(默认值),则在填充检查之前,将不在正常base-64字母表中或替代字母表中的字符丢弃。如果validate是True
,则输入中的这些非字母字符会导致binascii.Error
。
base64.
b32decode
(s, casefold=False, map01=None)¶解码Base32编码的bytes-like object或ASCII字符串s并返回解码的
bytes
。可选casefold是指定是否可接受小写字母作为输入的标志。出于安全考虑,默认值为
False
。RFC 3548允许将数字0(零)可选地映射到字母O(oh),并且可选地将数字1(一)映射到字母I(eye)或字母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
。折叠空间是一个可选标志,使用特殊短序列“y”,而不是“btoa”支持的4个连续空格(ASCII 0x20)。“标准”Ascii85编码不支持此功能。
wrapcol控制输出是否应该添加换行符(
b'\n'
)。如果这是非零,每个输出行将最多这个许多字符长。pad控制输入在编码之前是否填充为4的倍数。注意,
btoa
实现总是垫。adobe控制编码后的字节序列是否用
<~
and~>
包围,用于Adobe实现。新版本3.4。
base64.
a85decode
(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\v')¶解码Ascii85编码的bytes-like object或ASCII字符串b并返回解码的
bytes
。折叠空间是指定是否应接受“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-style binary 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)¶解码二进制输入文件的内容,并将生成的二进制数据写入输出文件。输入和输出必须是file objects。输入将被读取,直到
input.readline()
返回一个空字节对象。
base64.
decodebytes
(s)¶base64.
decodestring
(s)¶解码bytes-like object s,其中必须包含一行或多行base64编码数据,并返回解码的
bytes
。decodestring
是一个已弃用的别名。版本3.1中的新功能。
base64.
encode
(input, output)¶编码二进制输入文件的内容,并将生成的base64编码数据写入输出文件。输入和输出必须是file objects。输入将被读取,直到
input.read()
返回一个空字节对象。encode()
在输出的每76个字节后插入一个换行符(b'\n'
),以及确保输出总是以换行符结束每 RFC 2045(MIME)。
base64.
encodebytes
(s)¶base64.
encodestring
(s)¶编码类字节对象s,它可以包含任意二进制数据,并返回base64编码数据的
字节
,根据RFC 2045 (MIME),在输出的每76个字节之后插入换行符(b'\n'
),并确保末尾有一个换行符。encodestring
是已弃用的别名。
模块的示例用法:
>>> import base64
>>> encoded = base64.b64encode(b'data to be encoded')
>>> encoded
b'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
b'data to be encoded'