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_charsetiso-8859-1,則標頭和正文將使用 quoted-printable 進行編碼,並且不需要輸出轉換編解碼器。如果 input_charseteuc-jp,則標頭將使用 base64 進行編碼,正文將不進行編碼,但輸出文字將從 euc-jp 字元集轉換為 iso-2022-jp 字元集。

Charset 例項具有以下資料屬性

input_charset

指定的初始字元集。常用別名會轉換為它們的官方電子郵件名稱(例如,latin_1 會轉換為 iso-8859-1)。預設為 7 位 us-ascii

header_encoding

如果必須先對字元集進行編碼才能在電子郵件標頭中使用,則此屬性將設定為 charset.QP(用於 quoted-printable)、charset.BASE64(用於 base64 編碼)或 charset.SHORTEST(用於 QP 或 BASE64 編碼中最短的)。否則,它將為 None

body_encoding

header_encoding 相同,但描述郵件訊息正文的編碼,這實際上可能與標頭編碼不同。不允許 body_encoding 使用 charset.SHORTEST

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-printablebase64(取決於使用的編碼),要麼是一個函式,在這種情況下,您應該使用一個引數(即正在編碼的 Message 物件)呼叫該函式。然後,該函式應將 Content-Transfer-Encoding 標頭本身設定為適當的值。

如果 body_encodingQP,則返回字串 quoted-printable;如果 body_encodingBASE64,則返回字串 base64;否則返回字串 7bit

get_output_charset()

返回輸出字元集。

如果 output_charset 不是 None,則此屬性為 output_charset 屬性;否則為 input_charset

header_encode(string)

對字串 string 進行標頭編碼。

編碼型別(base64 或 quoted-printable)將基於 header_encoding 屬性。

header_encode_lines(string, maxlengths)

透過先將字串轉換為位元組來對字串進行標頭編碼。

這類似於 header_encode(),不同之處在於,該字串會適應由引數 maxlengths 給出的最大行長度,該引數必須是迭代器:從此迭代器返回的每個元素都將提供下一個最大行長度。

body_encode(string)

對字串 string 進行正文編碼。

編碼型別(base64 或 quoted-printable)將基於 body_encoding 屬性。

Charset 類還提供了許多方法來支援標準操作和內建函式。

__str__()

返回 input_charset 作為強制轉換為小寫的字串。__repr__()__str__() 的別名。

__eq__(other)

此方法允許您比較兩個 Charset 例項是否相等。

__ne__(other)

此方法允許您比較兩個 Charset 例項是否不相等。

email.charset 模組還提供了以下函式,用於向全域性字元集、別名和編解碼器登錄檔新增新條目

email.charset.add_charset(charset, header_enc=None, body_enc=None, output_charset=None)

向全域性登錄檔新增字元屬性。

charset 是輸入字元集,並且必須是字元集的規範名稱。

可選的 header_encbody_enc 可以是 charset.QP (用於 quoted-printable 編碼),charset.BASE64 (用於 base64 編碼),charset.SHORTEST (用於 quoted-printable 或 base64 編碼中最短的編碼),或 None (不進行編碼)。SHORTEST 僅對 header_enc 有效。預設值為 None,表示不進行編碼。

可選的 output_charset 是輸出應採用的字元集。當呼叫 Charset.convert() 方法時,轉換將從輸入字元集進行到 Unicode,再到輸出字元集。預設情況下,輸出的字元集與輸入字元集相同。

input_charsetoutput_charset 都必須在模組的字元集到編解碼器對映中具有 Unicode 編解碼器條目;使用 add_codec() 來新增模組不知道的編解碼器。有關更多資訊,請參見 codecs 模組的文件。

全域性字元集註冊表儲存在模組全域性字典 CHARSETS 中。

email.charset.add_alias(alias, canonical)

新增字元集別名。alias 是別名,例如 latin-1canonical 是字元集的規範名稱,例如 iso-8859-1

全域性字元集別名登錄檔儲存在模組全域性字典 ALIASES 中。

email.charset.add_codec(charset, codecname)

新增一個編解碼器,該編解碼器將給定字元集中的字元對映到 Unicode,並從 Unicode 映射回來。

charset 是字元集的規範名稱。codecname 是 Python 編解碼器的名稱,適用於 strencode() 方法的第二個引數。