19.1.12. email.charset:表示字符集 — Python 文档
19.1.12。 电子邮件.charset : 表示字符集
源代码: :source:`Lib/email/charset.py`
此模块是旧式 (Compat32
) 电子邮件 API 的一部分。 在新 API 中,仅使用别名表。
本节的其余文本是该模块的原始文档。
该模块提供了一个类 Charset 用于表示电子邮件消息中的字符集和字符集转换,以及一个字符集注册表和一些用于操作该注册表的便捷方法。 Charset 的实例在 email 包中的其他几个模块中使用。
从 email.charset 模块导入此类。
- class email.charset.Charset(input_charset=DEFAULT_CHARSET)
将字符集映射到其电子邮件属性。
此类提供有关针对特定字符集对电子邮件施加的要求的信息。 考虑到适用的编解码器的可用性,它还提供了用于在字符集之间转换的便利例程。 给定一个字符集,它将尽最大努力提供有关如何以符合 RFC 的方式在电子邮件消息中使用该字符集的信息。
在电子邮件标题或正文中使用时,某些字符集必须使用带引号的可打印或 base64 进行编码。 某些字符集必须完全转换,并且不允许在电子邮件中使用。
可选的 input_charset 如下所述; 它总是被强制为小写。 别名规范化后,它还可用作字符集注册表的查找,以找出要用于字符集的标头编码、正文编码和输出转换编解码器。 例如,如果 input_charset 是
iso-8859-1
,则标题和正文将使用带引号的可打印进行编码,并且不需要输出转换编解码器。 如果 input_charset 是euc-jp
,则 headers 将使用 base64 编码,body 不会编码,但输出文本将从euc-jp
字符集转换为iso-2022-jp
字符集。Charset 实例具有以下数据属性:
- input_charset
指定的初始字符集。 常用别名转换为其 官方 电子邮件名称(例如
latin_1
转换为iso-8859-1
)。 默认为 7 位us-ascii
。
- header_encoding
如果字符集在用于电子邮件标头之前必须进行编码,则此属性将设置为
Charset.QP
(对于带引号的可打印)、Charset.BASE64
(对于 base64 编码)或 [ X179X] 用于最短的 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()
返回输出字符集。
如果不是
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_enc 和 body_enc 要么是
Charset.QP
用于引用打印,Charset.BASE64
用于 base64 编码,Charset.SHORTEST
用于引用最短的-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
中。
- email.charset.add_codec(charset, codecname)
添加一个编解码器,用于将给定字符集中的字符与 Unicode 进行映射。
charset 是字符集的规范名称。 codecname 是 Python 编解码器的名称,适用于 str 的 encode() 方法的第二个参数。