email.charset: 表示字符集?

源代碼: Lib/email/charset.py


此模塊是舊版 (Compat32) email API 的組成部分。 在新版 API 中只會使用其中的別名表。

本段落中的剩余文本是該模塊的原始文檔。

此模塊提供了一個 Charset 類用來表示電子郵件消息中的字符集和字符集轉換操作,以及一個字符集注冊表和幾個用于操作此注冊表的便捷方法。 Charset 的實例在 email 包的其他幾個模塊中也有使用。

請從 email.charset 模塊導入這個類。

class email.charset.Charset(input_charset=DEFAULT_CHARSET)?

將字符集映射到其 email 特征屬性。

這個類提供了特定字符集對于電子郵件的要求的相關信息。 考慮到適用編解碼器的可用性,它還為字符集之間的轉換提供了一些便捷例程。 在給定字符集的情況下,它將盡可能地以符合 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 一樣,但是用來描述電子郵件消息體的編碼格式,它實際上可以與標頭編碼格式不同。 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-printablebase64,或是返回一個函數,在這種情況下你應當調用該函數并附帶一個參數,即被編碼的消息對象。 該函數應當自行將 Content-Transfer-Encoding 標頭設為適當的值。

如果 body_encodingQP 則返回字符串 quoted-printable,如果 body_encodingBASE64 則返回字符串 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__() 的別名。

__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 表示沒有編碼格式。 SHORTESTheader_enc 的唯一有效值。 默認值為 None 表示沒有編碼格式。

可選的 output_charset 是輸出所應當采用的字符集。 當 Charset.convert() 方法被調用時將會執行從輸入字符集到輸出字符集的轉換。 默認情況下輸出字符集將與輸入字符集相同。

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 之間建立映射的編解碼器。

charset 是某個字符集的正規名稱。 codecname 是某個 Python 編解碼器的名稱,可以被用來作為 strencode() 方法的第二個參數。