19.1.9. email.charset:表示字符集

源代码: Lib / email / charset.py

此模块提供了一个类Charset,用于表示电子邮件中的字符集和字符集转换,以及字符集注册表和若干方便的方法来操作此注册表。Charset的实例用于email包中的其他几个模块。

email.charset模块导入此类。

class email.charset.Charset(input_charset=DEFAULT_CHARSET)

将字符集映射到其电子邮件属性。

此类提供有关特定字符集对电子邮件的要求的信息。它还提供了用于在字符集之间转换的方便例程,给定可用的编解码器的可用性。给定一个字符集,它将尽力提供有关如何以符合RFC的方式在电子邮件中使用该字符集的信息。

当在电子邮件标头或正文中使用时,某些字符集必须使用quoted-printable或base64进行编码。某些字符集必须完全转换,并且不允许在电子邮件中使用。

可选input_charset如下所述;它总是强制小写。在被别名规范化之后,它也被用作对字符集注册表的查找,以找出用于字符集的头编码,主体编码和输出转换编解码器。例如,如果input_charsetiso-8859-1,那么头和主体将使用quoted-printable进行编码,并且不需要输出转换编解码器。If input_charset is euc-jp, then headers will be encoded with base64, bodies will not be encoded, but output text will be converted from the euc-jp character set to the iso-2022-jp character set.

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相同,但描述了邮件消息正文的编码,确实可能与头编码不同。body_encoding不允许Charset.SHORTEST

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头设置为适当的值。

Returns the string quoted-printable if body_encoding is QP, returns the string base64 if body_encoding is BASE64, and returns the string 7bit otherwise.

get_output_charset()

返回输出字符集。

这是output_charset属性,如果不是None,否则为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)

向全局注册表中添加字符属性。

字符集是输入字符集,必须是字符集的规范名称。

Optional header_enc and body_enc is either Charset.QP for quoted-printable, Charset.BASE64 for base64 encoding, Charset.SHORTEST for the shortest of quoted-printable or base64 encoding, or None for no encoding. SHORTEST仅对header_enc有效。默认值为None,表示无编码。

可选output_charset是输出应该在的字符集。当调用方法Charset.convert()时,转换将从输入字符集,Unicode转换为输出字符集。默认值是以与输入相同的字符集输出。

input_charsetoutput_charset必须在模块的字符集到编解码器映射中具有Unicode编解码器条目;使用add_codec()添加模块不知道的编解码器。有关详细信息,请参阅codecs模块的文档。

全局字符集注册表保存在模块全局字典CHARSETS中。

email.charset.add_alias(alias, canonical)

添加字符集别名。别名是别名,例如latin-1规范是字符集的规范名称,例如iso-8859-1

全局字符集别名注册表保存在模块全局字典ALIASES中。

email.charset.add_codec(charset, codecname)

添加将Unicode中的给定字符集中的字符映射到Unicode的编解码器。

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