email.charset:表示字符集 — Python 文档

来自菜鸟教程
Python/docs/3.9/library/email.charset
跳转至:导航、​搜索

email.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_charsetiso-8859-1,则标题和正文将使用带引号的可打印进行编码,并且不需要输出转换编解码器。 如果 input_charseteuc-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-printablebase64,或者它是一个函数,在这种情况下,您应该使用单个参数调用该函数,即对 Message 对象进行编码。 然后,该函数应将 Content-Transfer-Encoding 标头本身设置为适当的值。

如果 body_encodingQP,则返回字符串 quoted-printable,如果 body_encodingBASE64,则返回字符串 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_encbody_enc 要么是 Charset.QP 用于引用打印,Charset.BASE64 用于 base64 编码,Charset.SHORTEST 用于引用最短的-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 进行映射。

charset 是字符集的规范名称。 codecname 是 Python 编解码器的名称,适用于 strencode() 方法的第二个参数。