“Python/docs/3.9/library/base64”的版本间差异
(autoload) |
小 (Page commit) |
||
第1行: | 第1行: | ||
+ | {{DISPLAYTITLE:base64 — Base16、Base32、Base64、Base85 数据编码 — Python 文档}} | ||
<div id="module-base64" class="section"> | <div id="module-base64" class="section"> | ||
<span id="base64-base16-base32-base64-base85-data-encodings"></span> | <span id="base64-base16-base32-base64-base85-data-encodings"></span> | ||
− | = | + | = base64 — Base16、Base32、Base64、Base85 数据编码 = |
− | ''' | + | '''源代码:''' [[#id1|<span id="id2" class="problematic">:source:`Lib/base64.py`</span>]] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ----- | |
− | |||
− | |||
− | |||
− | + | 该模块提供将二进制数据编码为可打印 ASCII 字符并将此类编码解码回二进制数据的函数。 它为定义 Base16、Base32 和 Base64 算法的 <span id="index-1" class="target"></span>[https://tools.ietf.org/html/rfc3548.html RFC 3548] 中指定的编码以及事实上的标准 Ascii85 和 Base85 编码提供编码和解码功能。 | |
− | |||
− | |||
− | |||
− | |||
− | + | <span id="index-2" class="target"></span>[https://tools.ietf.org/html/rfc3548.html RFC 3548] 编码适用于对二进制数据进行编码,以便可以安全地通过电子邮件发送、用作 URL 的一部分或作为 HTTP POST 请求的一部分包含在内。 编码算法与'''uuencode'''程序不同。 | |
− | + | ||
− | + | 该模块提供了两个接口。 现代接口支持将 [[../../glossary#term-bytes-like-object|bytes-like objects]] 编码为 ASCII [[../stdtypes#bytes|bytes]],并将 [[../../glossary#term-bytes-like-object|bytes-like objects]] 或包含 ASCII 的字符串解码为 [[../stdtypes#bytes|bytes]]。 支持 [X34X][https://tools.ietf.org/html/rfc3548.html RFC 3548](正常,以及 URL 和文件系统安全)中定义的两种 base-64 字母表。 | |
− | + | ||
− | + | 遗留接口不支持从字符串解码,但它确实提供了对 [[../../glossary#term-file-object|文件对象]] 进行编码和解码的功能。 它仅支持 Base64 标准字母表,并根据 <span id="index-4" class="target"></span>[https://tools.ietf.org/html/rfc2045.html RFC 2045] 每 76 个字符添加换行符。 请注意,如果您正在寻找 <span id="index-5" class="target"></span>[https://tools.ietf.org/html/rfc2045.html RFC 2045] 支持,您可能希望查看 [[../email#module-email|email]] 包。 | |
<div class="versionchanged"> | <div class="versionchanged"> | ||
− | <span class="versionmodified changed"> | + | <span class="versionmodified changed">3.3 版更改:</span>现代界面的解码功能现在接受仅 ASCII 的 Unicode 字符串。 |
− | |||
第38行: | 第26行: | ||
<div class="versionchanged"> | <div class="versionchanged"> | ||
− | <span class="versionmodified changed">在 3.4 | + | <span class="versionmodified changed">在 3.4 版更改:</span>任何 [[../../glossary#term-bytes-like-object|bytes-like objects]] 现在被此模块中的所有编码和解码函数接受。 添加了 Ascii85/Base85 支持。 |
− | |||
</div> | </div> | ||
− | + | 现代界面提供: | |
<dl> | <dl> | ||
− | <dt>< | + | <dt><span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">b64encode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">s</span></span>'', ''<span class="n"><span class="pre">altchars</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span>''<span class="sig-paren">)</span></dt> |
− | <dd><p> | + | <dd><p>使用 Base64 编码 [[../../glossary#term-bytes-like-object|bytes-like object]] ''s'' 并返回编码的 [[../stdtypes#bytes|bytes]]。</p> |
− | [[../stdtypes#bytes| | + | <p>可选的 ''altchars'' 必须是一个 [[../../glossary#term-bytes-like-object|bytes-like object]],长度至少为 2(附加字符被忽略),它指定了 <code>+</code> 和 [ X187X] 字符。 这允许应用程序例如 生成 URL 或文件系统安全的 Base64 字符串。 默认值为 <code>None</code>,使用标准 Base64 字母表。</p></dd></dl> |
− | <p> | ||
− | |||
− | |||
− | |||
− | |||
<dl> | <dl> | ||
− | <dt>< | + | <dt><span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">b64decode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">s</span></span>'', ''<span class="n"><span class="pre">altchars</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span>'', ''<span class="n"><span class="pre">validate</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span>''<span class="sig-paren">)</span></dt> |
− | <dd><p> | + | <dd><p>解码 Base64 编码的 [[../../glossary#term-bytes-like-object|bytes-like object]] 或 ASCII 字符串 ''s'' 并返回解码的 [[../stdtypes#bytes|bytes]]。</p> |
− | ''s'' | + | <p>可选的 ''altchars'' 必须是一个 [[../../glossary#term-bytes-like-object|bytes-like object]] 或至少长度为 2 的 ASCII 字符串(附加字符被忽略),它指定使用替代字母表代替 <code>+</code>和 <code>/</code> 字符。</p> |
− | <p> | + | <p>如果 ''s'' 填充不正确,则会引发 [[../binascii#binascii|binascii.Error]] 异常。</p> |
− | + | <p>如果 ''validate'' 是 <code>False</code>(默认值),则在填充检查之前丢弃既不在正常 base-64 字母表中也不在替代字母表中的字符。 如果 ''validate'' 是 <code>True</code>,则输入中的这些非字母字符会导致 [[../binascii#binascii|binascii.Error]]。</p></dd></dl> | |
− | |||
− | <p> | ||
− | |||
− | <p> | ||
− | |||
− | |||
− | |||
− | [[../binascii#binascii| | ||
− | ; < | + | ; <span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">standard_b64encode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">s</span></span>''<span class="sig-paren">)</span> |
− | : | + | : 使用标准 Base64 字母表对 [[../../glossary#term-bytes-like-object|bytes-like object]] ''s'' 进行编码,并返回编码后的 [[../stdtypes#bytes|bytes]]。 |
− | ; < | + | ; <span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">standard_b64decode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">s</span></span>''<span class="sig-paren">)</span> |
− | : | + | : 使用标准 Base64 字母表解码 [[../../glossary#term-bytes-like-object|bytes-like object]] 或 ASCII 字符串 ''s'' 并返回解码后的 [[../stdtypes#bytes|bytes]]。 |
− | ; < | + | ; <span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">urlsafe_b64encode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">s</span></span>''<span class="sig-paren">)</span> |
− | : | + | : 使用 URL 和文件系统安全字母表编码 [[../../glossary#term-bytes-like-object|bytes-like object]] ''s'',用 <code>-</code> 代替 <code>+</code> 和 <code>_</code> ] 而不是标准 Base64 字母表中的 <code>/</code>,并返回编码的 [[../stdtypes#bytes|字节]] 。 结果仍然可以包含 <code>=</code>。 |
− | ; < | + | ; <span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">urlsafe_b64decode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">s</span></span>''<span class="sig-paren">)</span> |
− | : | + | : 使用 URL 和文件系统安全字母表解码 [[../../glossary#term-bytes-like-object|bytes-like object]] 或 ASCII 字符串 ''s'',用 <code>-</code> 代替 <code>+</code> 和 <code>_</code> 代替标准 Base64 字母表中的 <code>/</code>,并返回解码后的 [[../stdtypes#bytes|bytes]]。 |
− | ; < | + | ; <span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">b32encode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">s</span></span>''<span class="sig-paren">)</span> |
− | : | + | : 使用 Base32 对 [[../../glossary#term-bytes-like-object|bytes-like object]] ''s'' 进行编码,并返回编码后的 [[../stdtypes#bytes|bytes]]。 |
<dl> | <dl> | ||
− | <dt>< | + | <dt><span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">b32decode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">s</span></span>'', ''<span class="n"><span class="pre">casefold</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span>'', ''<span class="n"><span class="pre">map01</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span>''<span class="sig-paren">)</span></dt> |
− | <dd><p> | + | <dd><p>解码 Base32 编码的 [[../../glossary#term-bytes-like-object|bytes-like object]] 或 ASCII 字符串 ''s'' 并返回解码的 [[../stdtypes#bytes|bytes]]。</p> |
− | + | <p>可选的 ''casefold'' 是一个标志,用于指定是否可以接受小写字母作为输入。 出于安全考虑,默认值为 <code>False</code>。</p> | |
− | <p> | + | <p><span id="index-6" class="target"></span>[https://tools.ietf.org/html/rfc3548.html RFC 3548] 允许将数字 0(零)可选映射到字母 O(哦),以及将数字 1(一)可选映射到字母 I( eye) 或字母 L (el)。 可选参数 ''map01'' 当不是 <code>None</code> 时,指定数字 1 应该映射到哪个字母(当 ''map01'' 不是 <code>None</code> 时,数字 0总是映射到字母 O)。 出于安全考虑,默认值为 <code>None</code>,因此输入中不允许使用 0 和 1。</p> |
− | + | <p>如果 ''s'' 填充不正确或输入中存在非字母字符,则会引发 [[../binascii#binascii|binascii.Error]]。</p></dd></dl> | |
− | |||
− | <p><span id="index-6" class="target"></span>[https://tools.ietf.org/html/rfc3548.html | ||
− | |||
− | |||
− | |||
− | |||
− | <code>None</code> | ||
− | <p> | ||
− | |||
− | |||
− | ; < | + | ; <span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">b16encode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">s</span></span>''<span class="sig-paren">)</span> |
− | : | + | : 使用 Base16 对 [[../../glossary#term-bytes-like-object|bytes-like object]] ''s'' 进行编码,并返回编码后的 [[../stdtypes#bytes|bytes]]。 |
<dl> | <dl> | ||
− | <dt>< | + | <dt><span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">b16decode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">s</span></span>'', ''<span class="n"><span class="pre">casefold</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span>''<span class="sig-paren">)</span></dt> |
− | <dd><p> | + | <dd><p>解码 Base16 编码的 [[../../glossary#term-bytes-like-object|bytes-like object]] 或 ASCII 字符串 ''s'' 并返回解码的 [[../stdtypes#bytes|bytes]]。</p> |
− | + | <p>可选的 ''casefold'' 是一个标志,用于指定是否可以接受小写字母作为输入。 出于安全考虑,默认值为 <code>False</code>。</p> | |
− | <p> | + | <p>如果 ''s'' 填充不正确或输入中存在非字母字符,则会引发 [[../binascii#binascii|binascii.Error]]。</p></dd></dl> |
− | |||
− | |||
− | <p> | ||
− | |||
− | |||
<dl> | <dl> | ||
− | <dt>< | + | <dt><span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">a85encode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">b</span></span>'', ''<span class="o"><span class="pre">*</span></span>'', ''<span class="n"><span class="pre">foldspaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span>'', ''<span class="n"><span class="pre">wrapcol</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">0</span></span>'', ''<span class="n"><span class="pre">pad</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span>'', ''<span class="n"><span class="pre">adobe</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span>''<span class="sig-paren">)</span></dt> |
− | <dd><p> | + | <dd><p>使用 Ascii85 对 [[../../glossary#term-bytes-like-object|bytes-like object]] ''b'' 进行编码,并返回编码后的 [[../stdtypes#bytes|bytes]]。</p> |
− | + | <p>''foldspaces'' 是一个可选标志,它使用特殊的短序列 'y' 而不是 'btoa' 支持的 4 个连续空格(ASCII 0x20)。 “标准” Ascii85 编码不支持此功能。</p> | |
− | <p>''foldspaces'' | + | <p>''wrapcol'' 控制输出是否应添加换行符 (<code>b'\n'</code>) 字符。 如果这是非零值,则每个输出行最多只有这么多字符长。</p> |
− | + | <p>''pad'' 控制输入是否在编码前填充为 4 的倍数。 请注意,<code>btoa</code> 实现始终填充。</p> | |
− | + | <p>''adobe'' 控制编码的字节序列是否使用 <code><~</code> 和 <code>~></code> 进行框架化,Adobe 实现使用了它们。</p> | |
− | <p>''wrapcol'' | ||
− | |||
− | |||
− | <p>''pad'' | ||
− | |||
− | <p>''adobe'' | ||
− | |||
<div class="versionadded"> | <div class="versionadded"> | ||
− | <p><span class="versionmodified added">3.4 | + | <p><span class="versionmodified added">3.4 版中的新功能。</span></p> |
</div></dd></dl> | </div></dd></dl> | ||
<dl> | <dl> | ||
− | <dt>< | + | <dt><span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">a85decode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">b</span></span>'', ''<span class="o"><span class="pre">*</span></span>'', ''<span class="n"><span class="pre">foldspaces</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span>'', ''<span class="n"><span class="pre">adobe</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span>'', ''<span class="n"><span class="pre">ignorechars</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">b'</span> <span class="pre">\\t\\n\\r\\v'</span></span>''<span class="sig-paren">)</span></dt> |
− | <dd><p> | + | <dd><p>解码 Ascii85 编码的 [[../../glossary#term-bytes-like-object|bytes-like object]] 或 ASCII 字符串 ''b'' 并返回解码的 [[../stdtypes#bytes|bytes]]。</p> |
− | + | <p>''foldspaces'' 是一个标志,用于指定是否应接受 'y' 短序列作为 4 个连续空格 (ASCII 0x20) 的简写。 “标准” Ascii85 编码不支持此功能。</p> | |
− | <p>''foldspaces'' | + | <p>''adobe'' 控制输入序列是否为 Adobe Ascii85 格式(即 用 框起来)。</p> |
− | + | <p>''ignorechars'' 应该是一个 [[../../glossary#term-bytes-like-object|bytes-like object]] 或包含要从输入中忽略的字符的 ASCII 字符串。 这应该只包含空白字符,默认情况下包含 ASCII 中的所有空白字符。</p> | |
− | |||
− | <p>''adobe'' | ||
− | |||
− | <p>''ignorechars'' | ||
− | |||
− | |||
− | |||
<div class="versionadded"> | <div class="versionadded"> | ||
− | <p><span class="versionmodified added">3.4 | + | <p><span class="versionmodified added">3.4 版中的新功能。</span></p> |
</div></dd></dl> | </div></dd></dl> | ||
<dl> | <dl> | ||
− | <dt>< | + | <dt><span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">b85encode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">b</span></span>'', ''<span class="n"><span class="pre">pad</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span>''<span class="sig-paren">)</span></dt> |
− | <dd><p> | + | <dd><p>使用 base85 对 [[../../glossary#term-bytes-like-object|bytes-like object]] ''b'' 进行编码(例如 git 样式的二进制差异)并返回编码的 [[../stdtypes#bytes|字节]] 。</p> |
− | git | + | <p>如果 ''pad'' 为真,则输入用 <code>b'\0'</code> 填充,因此其长度是编码前 4 字节的倍数。</p> |
− | <p> | ||
− | |||
<div class="versionadded"> | <div class="versionadded"> | ||
− | <p><span class="versionmodified added">3.4 | + | <p><span class="versionmodified added">3.4 版中的新功能。</span></p> |
</div></dd></dl> | </div></dd></dl> | ||
<dl> | <dl> | ||
− | <dt>< | + | <dt><span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">b85decode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">b</span></span>''<span class="sig-paren">)</span></dt> |
− | <dd><p> | + | <dd><p>解码 base85 编码的 [[../../glossary#term-bytes-like-object|bytes-like object]] 或 ASCII 字符串 ''b'' 并返回解码后的 [[../stdtypes#bytes|bytes]]。 如有必要,将隐式删除填充。</p> |
− | |||
− | |||
<div class="versionadded"> | <div class="versionadded"> | ||
− | <p><span class="versionmodified added">3.4 | + | <p><span class="versionmodified added">3.4 版中的新功能。</span></p> |
</div></dd></dl> | </div></dd></dl> | ||
− | + | 遗留接口: | |
− | ; < | + | ; <span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">decode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">input</span></span>'', ''<span class="n"><span class="pre">output</span></span>''<span class="sig-paren">)</span> |
− | : | + | : 对二进制 ''input'' 文件的内容进行解码,并将生成的二进制数据写入 ''output'' 文件。 ''input'' 和 ''output'' 必须是 [[../../glossary#term-file-object|文件对象]] 。 ''input'' 将被读取,直到 <code>input.readline()</code> 返回一个空字节对象。 |
<dl> | <dl> | ||
− | <dt>< | + | <dt><span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">decodebytes</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">s</span></span>''<span class="sig-paren">)</span></dt> |
− | <dd><p> | + | <dd><p>解码[[../../glossary#term-bytes-like-object|bytes-like object]] ''s'',其中必须包含一行或多行base64编码数据,并返回解码后的[[../stdtypes#bytes|bytes]]。</p> |
− | |||
<div class="versionadded"> | <div class="versionadded"> | ||
− | <p><span class="versionmodified added">3.1 | + | <p><span class="versionmodified added">3.1 版中的新功能。</span></p> |
</div></dd></dl> | </div></dd></dl> | ||
− | ; < | + | ; <span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">encode</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">input</span></span>'', ''<span class="n"><span class="pre">output</span></span>''<span class="sig-paren">)</span> |
− | : | + | : 对二进制 ''input'' 文件的内容进行编码,并将生成的 base64 编码数据写入 ''output'' 文件。 ''input'' 和 ''output'' 必须是 [[../../glossary#term-file-object|文件对象]] 。 ''input'' 将被读取,直到 <code>input.read()</code> 返回一个空字节对象。 [[#base64.encode|encode()]] 在输出的每 76 个字节后插入一个换行符 (<code>b'\n'</code>),并确保输出总是以换行符结尾,如 <span id="index-7" class="target"></span> [https://tools.ietf.org/html/rfc2045.html RFC 2045] (MIME)。 |
<dl> | <dl> | ||
− | <dt>< | + | <dt><span class="sig-prename descclassname"><span class="pre">base64.</span></span><span class="sig-name descname"><span class="pre">encodebytes</span></span><span class="sig-paren">(</span>''<span class="n"><span class="pre">s</span></span>''<span class="sig-paren">)</span></dt> |
− | <dd><p> | + | <dd><p>对 [[../../glossary#term-bytes-like-object|bytes-like object]] ''s'' 进行编码,其中可以包含任意二进制数据,并返回包含 base64 编码数据的 [[../stdtypes#bytes|bytes]],使用换行符 ([ X172X]) 在每 76 个输出字节后插入,并确保有一个尾随换行符,根据 <span id="index-8" class="target"></span>[https://tools.ietf.org/html/rfc2045.html RFC 2045] (MIME)。</p> |
− | |||
− | ( | ||
− | |||
<div class="versionadded"> | <div class="versionadded"> | ||
− | <p><span class="versionmodified added">3.1 | + | <p><span class="versionmodified added">3.1 版中的新功能。</span></p> |
</div></dd></dl> | </div></dd></dl> | ||
− | + | 该模块的示例用法: | |
<div class="doctest highlight-default notranslate"> | <div class="doctest highlight-default notranslate"> | ||
第214行: | 第151行: | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">>>> import base64 |
− | + | >>> encoded = base64.b64encode(b'data to be encoded') | |
− | + | >>> encoded | |
b'ZGF0YSB0byBiZSBlbmNvZGVk' | b'ZGF0YSB0byBiZSBlbmNvZGVk' | ||
− | + | >>> data = base64.b64decode(encoded) | |
− | + | >>> data | |
− | b'data to be encoded'</ | + | b'data to be encoded'</syntaxhighlight> |
</div> | </div> | ||
第227行: | 第164行: | ||
<div class="admonition seealso"> | <div class="admonition seealso"> | ||
− | + | 也可以看看 | |
+ | |||
+ | ; 模块 [[../binascii#module-binascii|binascii]] | ||
+ | : 包含 ASCII 到二进制和二进制到 ASCII 转换的支持模块。 | ||
+ | ; <span id="index-9" class="target"></span>[https://tools.ietf.org/html/rfc1521.html RFC 1521] - MIME(多用途互联网邮件扩展)第一部分:指定和描述互联网消息体格式的机制 | ||
+ | : 第 5.2 节“Base64 内容传输编码”提供了 base64 编码的定义。 | ||
− | |||
− | |||
− | |||
− | |||
+ | </div> | ||
</div> | </div> | ||
+ | <div class="clearer"> | ||
+ | |||
+ | |||
</div> | </div> | ||
− | [[Category:Python 3.9 | + | [[Category:Python 3.9 文档]] |
2021年10月31日 (日) 04:51的最新版本
base64 — Base16、Base32、Base64、Base85 数据编码
该模块提供将二进制数据编码为可打印 ASCII 字符并将此类编码解码回二进制数据的函数。 它为定义 Base16、Base32 和 Base64 算法的 RFC 3548 中指定的编码以及事实上的标准 Ascii85 和 Base85 编码提供编码和解码功能。
RFC 3548 编码适用于对二进制数据进行编码,以便可以安全地通过电子邮件发送、用作 URL 的一部分或作为 HTTP POST 请求的一部分包含在内。 编码算法与uuencode程序不同。
该模块提供了两个接口。 现代接口支持将 bytes-like objects 编码为 ASCII bytes,并将 bytes-like objects 或包含 ASCII 的字符串解码为 bytes。 支持 [X34X]RFC 3548(正常,以及 URL 和文件系统安全)中定义的两种 base-64 字母表。
遗留接口不支持从字符串解码,但它确实提供了对 文件对象 进行编码和解码的功能。 它仅支持 Base64 标准字母表,并根据 RFC 2045 每 76 个字符添加换行符。 请注意,如果您正在寻找 RFC 2045 支持,您可能希望查看 email 包。
3.3 版更改:现代界面的解码功能现在接受仅 ASCII 的 Unicode 字符串。
在 3.4 版更改:任何 bytes-like objects 现在被此模块中的所有编码和解码函数接受。 添加了 Ascii85/Base85 支持。
现代界面提供:
- base64.b64encode(s, altchars=None)
使用 Base64 编码 bytes-like object s 并返回编码的 bytes。
可选的 altchars 必须是一个 bytes-like object,长度至少为 2(附加字符被忽略),它指定了
+
和 [ X187X] 字符。 这允许应用程序例如 生成 URL 或文件系统安全的 Base64 字符串。 默认值为None
,使用标准 Base64 字母表。
- base64.b64decode(s, altchars=None, validate=False)
解码 Base64 编码的 bytes-like object 或 ASCII 字符串 s 并返回解码的 bytes。
可选的 altchars 必须是一个 bytes-like object 或至少长度为 2 的 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 字母表中的/
,并返回编码的 字节 。 结果仍然可以包含=
。
- 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(哦),以及将数字 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。
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 样式的二进制差异)并返回编码的 字节 。
如果 pad 为真,则输入用
b'\0'
填充,因此其长度是编码前 4 字节的倍数。3.4 版中的新功能。
- base64.b85decode(b)
解码 base85 编码的 bytes-like object 或 ASCII 字符串 b 并返回解码后的 bytes。 如有必要,将隐式删除填充。
3.4 版中的新功能。
遗留接口:
- base64.decode(input, output)
- 对二进制 input 文件的内容进行解码,并将生成的二进制数据写入 output 文件。 input 和 output 必须是 文件对象 。 input 将被读取,直到
input.readline()
返回一个空字节对象。
- base64.decodebytes(s)
解码bytes-like object s,其中必须包含一行或多行base64编码数据,并返回解码后的bytes。
3.1 版中的新功能。
- base64.encode(input, output)
- 对二进制 input 文件的内容进行编码,并将生成的 base64 编码数据写入 output 文件。 input 和 output 必须是 文件对象 。 input 将被读取,直到
input.read()
返回一个空字节对象。 encode() 在输出的每 76 个字节后插入一个换行符 (b'\n'
),并确保输出总是以换行符结尾,如 RFC 2045 (MIME)。
- base64.encodebytes(s)
对 bytes-like object s 进行编码,其中可以包含任意二进制数据,并返回包含 base64 编码数据的 bytes,使用换行符 ([ X172X]) 在每 76 个输出字节后插入,并确保有一个尾随换行符,根据 RFC 2045 (MIME)。
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'