19.1.9. email.charset
:表示字符集¶
此模块提供了一个类Charset
,用于表示电子邮件中的字符集和字符集转换,以及字符集注册表和若干方便的方法来操作此注册表。Charset
的实例用于email
包中的其他几个模块。
从email.charset
模块导入此类。
- class
email.charset.
Charset
(input_charset=DEFAULT_CHARSET)¶ 将字符集映射到其电子邮件属性。
此类提供有关特定字符集对电子邮件的要求的信息。它还提供了用于在字符集之间转换的方便例程,给定可用的编解码器的可用性。给定一个字符集,它将尽力提供有关如何以符合RFC的方式在电子邮件中使用该字符集的信息。
当在电子邮件标头或正文中使用时,某些字符集必须使用quoted-printable或base64进行编码。某些字符集必须完全转换,并且不允许在电子邮件中使用。
可选input_charset如下所述;它总是强制小写。在被别名规范化之后,它也被用作对字符集注册表的查找,以找出用于字符集的头编码,主体编码和输出转换编解码器。例如,如果input_charset是
iso-8859-1
,那么头和主体将使用quoted-printable进行编码,并且不需要输出转换编解码器。If input_charset iseuc-jp
, then headers will be encoded with base64, bodies will not be encoded, but output text will be converted from theeuc-jp
character set to theiso-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-printable
或base64
,或者是一个函数,在这种情况下,应该使用单个参数正在编码的消息对象。然后,函数应将Content-Transfer-Encoding头设置为适当的值。Returns the string
quoted-printable
if body_encoding isQP
, returns the stringbase64
if body_encoding isBASE64
, and returns the string7bit
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__()
的别名。
-
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, orNone
for no encoding.SHORTEST
仅对header_enc有效。默认值为None
,表示无编码。可选output_charset是输出应该在的字符集。当调用方法
Charset.convert()
时,转换将从输入字符集,Unicode转换为输出字符集。默认值是以与输入相同的字符集输出。input_charset和output_charset必须在模块的字符集到编解码器映射中具有Unicode编解码器条目;使用
add_codec()
添加模块不知道的编解码器。有关详细信息,请参阅codecs
模块的文档。全局字符集注册表保存在模块全局字典
CHARSETS
中。
-
email.charset.
add_alias
(alias, canonical)¶ 添加字符集别名。别名是别名,例如
latin-1
。规范是字符集的规范名称,例如iso-8859-1
。全局字符集别名注册表保存在模块全局字典
ALIASES
中。