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

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

18.1.6. 电子邮件.charset : 表示字符集

该模块提供了一个类 Charset 用于表示电子邮件消息中的字符集和字符集转换,以及一个字符集注册表和一些用于操作该注册表的便捷方法。 Charset 的实例在 email 包中的其他几个模块中使用。

email.charset 模块导入此类。

2.2.2 版中的新功能。


class email.charset.Charset([input_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

convert(s)

将字符串 sinput_codec 转换为 output_codec

to_splittable(s)

将可能的多字节字符串转换为安全可拆分的格式。 s 是要拆分的字符串。

使用 input_codec 尝试将字符串转换为 Unicode,因此可以安全地在字符边界上拆分(即使对于多字节字符)。

如果不知道如何使用 input_charsets 转换为 Unicode,则按原样返回字符串。

无法转换为 Unicode 的字符将替换为 Unicode 替换字符 'U+FFFD'

from_splittable(ustr[, to_output])

将可拆分的字符串转换回编码字符串。 ustr 是一个要“unsplit”的 Unicode 字符串。

此方法使用适当的编解码器尝试将字符串从 Unicode 转换回编码格式。 如果字符串不是 Unicode,或者无法从 Unicode 转换,则按原样返回字符串。

无法从 Unicode 转换的字符将被替换为适当的字符(通常为 '?')。

如果 to_outputTrue(默认值),则使用 output_codec 转换为编码格式。 如果 to_outputFalse,则使用 input_codec

get_output_charset()

返回输出字符集。

如果不是 None,则为 output_charset 属性,否则为 input_charset

encoded_header_len()

返回编码头字符串的长度,正确计算引用打印或 base64 编码。

header_encode(s[, convert])

标头编码字符串 s

如果 convertTrue,字符串将自动从输入字符集转换为输出字符集。 这对于具有行长问题的多字节字符集没有用(多字节字符必须在一个字符上拆分,而不是在字节边界上); 使用更高级别的 Header 类来处理这些问题(参见 email.header)。 convert 默认为 False

编码类型(base64 或quoted-printable)将基于 header_encoding 属性。

body_encode(s[, convert])

对字符串 s 进行正文编码。

如果 convertTrue(默认值),字符串将自动从输入字符集转换为输出字符集。 与 header_encode() 不同,电子邮件正文中的字节边界和多字节字符集没有问题,因此这通常非常安全。

编码类型(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[, body_enc[, output_charset]]])

将字符属性添加到全局注册表。

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 编解码器的名称,适用于 unicode() 内置的第二个参数,或 Unicode 字符串的 encode() 方法.