On this page
base64 — Base16,Base32,Base64,Base85 数据编码
源代码: Lib/base64.py
该模块提供了将二进制数据编码为可打印的 ASCII 字符并将这些编码解码回二进制数据的Function。它为 RFC 3548中指定的编码(定义了 Base16,Base32 和 Base64 算法)以及事实上的标准 Ascii85 和 Base85 编码提供了编码和解码Function。
RFC 3548编码适合对二进制数据进行编码,以便可以安全地pass电子邮件发送,用作 URL 的一部分或包含在 HTTP POST 请求中。编码算法与 uuencode 程序不同。
此模块提供两个接口。现代接口支持将bytes-like objects编码为 ASCII bytes,并解码bytes-like objects或将包含 ASCII 的字符串解码为bytes。支持在 RFC 3548中定义的两种 base-64 字母(正常,URL 和文件系统安全)。
旧版接口不支持从字符串解码,但确实提供了用于与file objects进行编码和解码的Function。它仅支持 Base64 标准字母,并且按照 RFC 2045每 76 个字符添加换行符。请注意,如果您正在寻找 RFC 2045支持,则可能希望查看email软件包。
在版本 3.3 中进行了更改:现代接口的解码Function现在可以接受纯 ASCII Unicode 字符串。
在版本 3.4 中更改:此模块中的所有编码和解码Function现在都接受任何bytes-like objects。添加了 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
,则 Importing 中的这些非字母字符将产生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。结果仍然可以包含=
。
- 使用 URL 和文件系统安全字母表对bytes-like object * s *进行编码,该字母表在标准 Base64 字母表中用
base64.
urlsafe_b64decode
(* s *)- 使用 URL 和文件系统安全字母对bytes-like object或 ASCII 字符串* s *进行解码,该字母在标准 Base64 字母表中用
-
代替+
和_
代替/
,并返回解码后的bytes。
- 使用 URL 和文件系统安全字母对bytes-like object或 ASCII 字符串* s *进行解码,该字母在标准 Base64 字母表中用
base64.
b32encode
(* s *)- 使用 Base32 编码bytes-like object * s *并返回编码后的bytes。
base64.
b32decode
(* s , casefold = False , map01 = None *)- 解码 Base32 编码的bytes-like object或 ASCII 字符串* s *并返回解码的bytes。
可选的* 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 *或 Importing 中存在非字母字符,则引发binascii.Error。
base64.
b16encode
(* s *)- 使用 Base16 编码bytes-like object * s *并返回编码后的bytes。
base64.
b16decode
(* s , casefold = False *)- 解码 Base16 编码的bytes-like object或 ASCII 字符串* s *并返回解码的bytes。
可选的* casefold *是一个标志,指定是否可以接受小写字母作为 Importing。为了安全起见,默认值为False
。
如果错误地填充* s *或 Importing 中存在非字母字符,则引发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 编码不支持此Function。
wrapcol *控制是否在输出中添加换行符(
b'\n'
)。如果它不为零,则每条输出行最多只能有这么多字符长。pad *控制在编码之前是否将 Importing 填充为 4 的倍数。请注意,
btoa
实现始终填充。adobe *控制是否使用
<~
和~>
来对编码的字节序列进行构图,这是 Adobe 实现所使用的。
3.4 版的新Function。
base64.
a85decode
(* b ,**,* foldspaces = False , adobe = False , ignorechars = b' tnrv'*)- 解码 Ascii85 编码的bytes-like object或 ASCII 字符串* b *并返回解码的bytes。
foldspaces *是一个标志,用于指定是否应将'y'短序列作为 4 个连续空格(ASCII 0x20)的缩写。 “标准” Ascii85 编码不支持此Function。
adobe *控制 Importing 序列是否为 Adobe Ascii85 格式(即以<~ and ~>表示)。
ignorechars *应该是bytes-like object或 ASCII 字符串,其中包含要从 Importing 中忽略的字符。它只能包含空格字符,并且默认情况下包含所有 ASCII 空格字符。
3.4 版的新Function。
base64.
b85encode
(* b , pad = False *)- 使用 base85 编码bytes-like object * b *(例如 git 样式的二进制差异),并返回编码的bytes。
如果* pad *为 true,则 Importing 将填充b'\0'
,因此其长度是编码前 4 字节的倍数。
3.4 版的新Function。
base64.
b85decode
(* b *)- 解码 base85 编码的bytes-like object或 ASCII 字符串* b *并返回解码的bytes。如有必要,隐式删除填充。
3.4 版的新Function。
旧版界面:
base64.
decode
(* input , output *)- 解码二进制 Importing 文件的内容,并将生成的二进制数据写入输出文件。 * input 和 output *必须为file objects。 * input *将被读取,直到
input.readline()
返回一个空字节对象。
- 解码二进制 Importing 文件的内容,并将生成的二进制数据写入输出文件。 * input 和 output *必须为file objects。 * input *将被读取,直到
base64.
decodebytes
(* s *)- 解码bytes-like object * s *,它必须包含一或多行 base64 编码的数据,然后返回解码的bytes。
3.1 版中的新Function。
base64.
decodestring
(* s *)- decodebytes()的别名已弃用。
从 3.1 版开始不推荐使用。
base64.
encode
(* input , output *)- 对二进制 Importing 文件的内容进行编码,并将生成的 base64 编码数据写入输出文件。 * input 和 output *必须为file objects。 * input *将被读取,直到
input.read()
返回一个空字节对象为止。 encode()在输出的每 76 个字节之后插入一个换行符(b'\n'
),并按照 RFC 2045(MIME)确保输出始终以换行符结尾。
- 对二进制 Importing 文件的内容进行编码,并将生成的 base64 编码数据写入输出文件。 * input 和 output *必须为file objects。 * input *将被读取,直到
base64.
encodebytes
(* s *)- 对可以包含任意二进制数据的bytes-like object * s *进行编码,然后返回包含 base64 编码数据的bytes,并在每输出 76 个字节后插入换行符(
b'\n'
),并确保按照 RFC 2045尾随换行符(哑剧)。
- 对可以包含任意二进制数据的bytes-like object * s *进行编码,然后返回包含 base64 编码数据的bytes,并在每输出 76 个字节后插入换行符(
3.1 版中的新Function。
base64.
encodestring
(* s *)- encodebytes()的别名已弃用。
从 3.1 版开始不推荐使用。
该模块的示例用法:
>>> import base64
>>> encoded = base64.b64encode(b'data to be encoded')
>>> encoded
b'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
b'data to be encoded'