email.charset
: 表示字元集¶
原始碼: Lib/email/charset.py
此模組是舊式 (Compat32
) email API 的一部分。在新的 API 中,僅使用別名表。
本節的其餘文字是該模組的原始文件。
此模組提供了一個 Charset
類,用於表示電子郵件訊息中的字元集和字元集轉換,以及一個字元集註冊表和幾個用於操作此登錄檔的便捷方法。Charset
的例項在 email
包中的其他幾個模組中使用。
從 email.charset
模組匯入此類。
- class email.charset.Charset(input_charset=DEFAULT_CHARSET)¶
將字元集對映到它們的電子郵件屬性。
此類提供了關於特定字元集在電子郵件中強制要求的相關資訊。在適用的編解碼器可用的情況下,它還提供了在字元集之間進行轉換的便捷例程。給定一個字元集,它將盡力提供如何在電子郵件中以符合 RFC 規範的方式使用該字元集的資訊。
某些字元集在用於電子郵件標頭或正文時,必須使用 quoted-printable 或 base64 進行編碼。某些字元集必須被徹底轉換,不允許在電子郵件中使用。
可選的 input_charset 如下所述;它總是被強制轉換為小寫。經過別名規範化後,它還被用作字元集註冊表的查詢鍵,以找出該字元集應使用的標頭編碼、正文編碼和輸出轉換編解碼器。例如,如果 input_charset 是
iso-8859-1
,那麼標頭和正文將使用 quoted-printable 進行編碼,並且不需要輸出轉換編解碼器。如果 input_charset 是euc-jp
,那麼標頭將使用 base64 編碼,正文不會被編碼,但輸出文字將從euc-jp
字元集轉換為iso-2022-jp
字元集。Charset
例項具有以下資料屬性:- input_charset¶
指定的初始字元集。常見的別名會被轉換為它們的*官方*電子郵件名稱(例如
latin_1
會被轉換為iso-8859-1
)。預設為 7-bitus-ascii
。
- header_encoding¶
如果字元集在用於電子郵件標頭之前必須進行編碼,此屬性將被設定為
charset.QP
(表示 quoted-printable)、charset.BASE64
(表示 base64 編碼),或charset.SHORTEST
(表示 QP 或 BASE64 中較短的一種編碼)。否則,它將是None
。
- body_encoding¶
與 header_encoding 相同,但描述的是郵件正文的編碼,它可能與標頭編碼不同。
charset.SHORTEST
不允許用於 body_encoding。
- output_charset¶
某些字元集在用於電子郵件標頭或正文之前必須進行轉換。如果 input_charset 是其中之一,此屬性將包含輸出將被轉換到的字元集名稱。否則,它將是
None
。
- input_codec¶
用於將 input_charset 轉換為 Unicode 的 Python 編解碼器名稱。如果不需要轉換編解碼器,此屬性將為
None
。
- output_codec¶
用於將 Unicode 轉換為 output_charset 的 Python 編解碼器名稱。如果不需要轉換編解碼器,此屬性將與 input_codec 具有相同的值。
Charset
例項還具有以下方法:- get_body_encoding()¶
返回用於正文編碼的內容傳輸編碼。
這要麼是字串
quoted-printable
或base64
,取決於所使用的編碼,要麼是一個函式。如果是一個函式,你應該用一個引數(即正在被編碼的 Message 物件)來呼叫該函式。然後該函式應自行將 Content-Transfer-Encoding 標頭設定為適當的值。如果 body_encoding 是
QP
,則返回字串quoted-printable
;如果 body_encoding 是BASE64
,則返回字串base64
;否則返回字串7bit
。
- get_output_charset()¶
返回輸出字元集。
如果 output_charset 屬性不為
None
,則返回該屬性,否則返回 input_charset。
- header_encode(string)¶
對字串 string 進行標頭編碼。
編碼型別 (base64 或 quoted-printable) 將基於 header_encoding 屬性。
- header_encode_lines(string, maxlengths)¶
透過先將 string 轉換為位元組串,再對其進行標頭編碼。
這類似於
header_encode()
,不同之處在於字串會被適配到由引數 maxlengths 提供的最大行長中,該引數必須是一個迭代器:此迭代器返回的每個元素將提供下一個最大行長。
- body_encode(string)¶
對字串 string 進行正文編碼。
編碼型別 (base64 或 quoted-printable) 將基於 body_encoding 屬性。
Charset
類還提供了許多方法來支援標準操作和內建函式。- __str__()¶
以強制轉換為小寫的字串形式返回 input_charset。
__repr__()
是__str__()
的別名。
email.charset
模組還提供了以下函式,用於向全域性字元集、別名和編解碼器登錄檔中新增新條目:
- email.charset.add_charset(charset, header_enc=None, body_enc=None, output_charset=None)¶
將字元屬性新增到全域性登錄檔。
charset 是輸入字元集,並且必須是字元集的規範名稱。
可選的 header_enc 和 body_enc 可以是
charset.QP
(表示 quoted-printable),charset.BASE64
(表示 base64 編碼),charset.SHORTEST
(表示 quoted-printable 或 base64 中較短的一種),或None
(表示不編碼)。SHORTEST
僅對 header_enc 有效。預設值為None
,表示不編碼。可選的 output_charset 是輸出應採用的字元集。當呼叫
Charset.convert()
方法時,轉換將從輸入字元集進行到 Unicode,再到輸出字元集。預設是輸出與輸入相同的字元集。input_charset 和 output_charset 都必須在模組的字元集到編解碼器對映中有 Unicode 編解碼器條目;使用
add_codec()
來新增模組不知道的編解碼器。有關更多資訊,請參閱codecs
模組的文件。全域性字元集註冊表儲存在模組全域性字典
CHARSETS
中。
- email.charset.add_alias(alias, canonical)¶
新增字元集別名。alias 是別名,例如
latin-1
。canonical 是字元集的規範名稱,例如iso-8859-1
。全域性字元集別名登錄檔儲存在模組全域性字典
ALIASES
中。