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 中的所有 base-64 字母表 (普通的、URL 安全的和文件系統安全的)。

舊的接口不提供從字符串的解碼操作,但提供了操作 文件對象 的編碼和解碼函數。舊接口只支持標準的 Base64 字母表,并且按照 RFC 2045 的規范每 76 個字符增加一個換行符。注意:如果你需要支持 RFC 2045,那么使用 email 模塊可能更加合適。

在 3.3 版更改: 新的接口提供的解碼函數現在已經支持只包含 ASCII 的 Unicode 字符串。

在 3.4 版更改: 所有 類字節對象 現在已經被所有編碼和解碼函數接受。添加了對 Ascii85/Base85 的支持。

新的接口提供:

base64.b64encode(s, altchars=None)?

bytes-like object s 進行 Base64 編碼,并返回編碼后的 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,它指定了用于替換 +/ 的字符。

如果 s 被不正確地填寫,一個 binascii.Error 錯誤將被拋出。

如果 validate 值為 False (默認情況),則在填充檢查前,將丟棄既不在標準 base-64 字母表之中也不在備用字母表中的字符。如果 validateTrue,這些非 base64 字符將導致 binascii.Error

base64.standard_b64encode(s)?

編碼 bytes-like object s,使用標準 Base64 字母表并返回編碼過的 bytes。

base64.standard_b64decode(s)?

解碼 bytes-like object 或 ASCII 字符串 s,使用標準 Base64 字母表并返回編碼過的 bytes

base64.urlsafe_b64encode(s)?

編碼 bytes-like object s,使用 URL 與文件系統安全的字母表,使用 - 以及 _ 代替標準 Base64 字母表中的 +/。返回編碼過的 bytes。結果中可能包含 =。

base64.urlsafe_b64decode(s)?

解碼 bytes-like object 或 ASCII 字符串 s,使用 URL 與文件系統安全的字母表,使用 - 以及 _ 代替標準 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(zero) 映射為字母 O(oh),并可以選擇是否將字母 1(one) 映射為 I(eye) 或 L(el)??蛇x參數 map01 不是 None 時,它的值指定 1 的映射目標 (I 或 l),當 map01None 時, 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 s 并返回編碼過的 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 字符串 s 并返回解碼過的 bytes。

foldspaces 旗標指明是否應接受 'y' 短序列作為 4 個連續空格 (ASCII 0x20) 的快捷方式。 此特性不被 "標準" Ascii85 編碼格式所支持。

adobe 控制輸入序列是否為 Adobe Ascii85 格式 (即附加 <~ 和 ~>)。

ignorechars 應當是一個 bytes-like object 或 ASCII 字符串,其中包含要從輸入中忽略的字符。 這應當只包含空白字符,并且默認包含 ASCII 中所有的空白字符。

3.4 新版功能.

base64.b85encode(b, pad=False)?

用 base85(如 git 風格的二進制 diff 數據所用格式)編碼 bytes-like object b 并返回編碼后的 bytes。

如果 pad 為真值,輸入將以 b'\0' 填充以使其編碼前長度為 4 字節的倍數。

3.4 新版功能.

base64.b85decode(b)?

解碼 base85 編碼過的 bytes-like object 或 ASCII 字符串 b 并返回解碼過的 bytes。 如有必要,填充會被隱式地移除。

3.4 新版功能.

舊式接口:

base64.decode(input, output)?

解碼二進制 input 文件的內容并將結果二進制數據寫入 output 文件。 inputoutput 必須為 文件對象. input 將被讀取直至 input.readline() 返回空字節串對象。

base64.decodebytes(s)?

解碼 bytes-like object s,該對象必須包含一行或多行 base64 編碼的數據,并返回已解碼的 bytes。

3.1 新版功能.

base64.decodestring(s)?

已棄用的 decodebytes() 的別名。

3.1 版后已移除.

base64.encode(input, output)?

編碼二進制 input 文件的內容并將經 base64 編碼的數據寫入 output 文件。 inputoutput 必須為 文件對象。 input 將被讀取直到 input.read() 返回空字節串對象。 encode() 會在每輸出 76 個字節之后插入一個換行符 (b'\n'),并會確保輸出總是以換行符來結束,如 RFC 2045 (MIME) 所規定的那樣。

base64.encodebytes(s)?

編碼 bytes-like object s,其中可以包含任意二進制數據,并返回包含經 base64 編碼數據的 bytes,每輸出 76 個字節之后將帶一個換行符 (b'\n'),并會確保在末尾也有一個換行符,如 RFC 2045 (MIME) 所規定的那樣。

3.1 新版功能.

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'

參見

模塊 binascii

支持模塊,包含ASCII到二進制和二進制到ASCII轉換。

RFC 1521 - MIME (Multipurpose Internet Mail Extensions) 第一部分:規定并描述因特網消息體的格式的機制。

第 5.2 節,“Base64 內容轉換編碼格式” 提供了 base64 編碼格式的定義。