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_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 位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-printable或base64,或是返回一個函數,在這種情況下你應當調用該函數并附帶一個參數,即被編碼的消息對象。 該函數應當自行將 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()方法被調用時將會執行從輸入字符集到輸出字符集的轉換。 默認情況下輸出字符集將與輸入字符集相同。input_charset 和 output_charset 都必須在模塊的字符集-編解碼器映射中具有 Unicode 編解碼器條目;使用
add_codec()可添加本模塊還不知道的編解碼器。 請參閱codecs模塊的文檔來了解更多信息。全局字符集注冊表保存在模塊全局字典
CHARSETS中。
-
email.charset.add_alias(alias, canonical)? 添加一個字符集別名。 alias 為特定的別名,例如
latin-1。 canonical 是字符集的正規名稱,例如iso-8859-1。全局字符集注冊表保存在模塊全局字典
ALIASES中。
