email.charset
: представление множества символов
Данный модуль является частью устаревшего API электронной почты (Compat32
).
В новом API используется только таблица псевдонимов.
Остальной текст в этом разделе является документацией из исходника модуля.
Данный модуль предоставляет класс Charset
для представления множеств
символов и преобразований символов в сообщениях электронной почты, а
также реестр символов и несколько удобных методов для управления данным
реестром. Экземпляры Charset
используются в других модулях
пакета email
.
Класс Charset импортируется из модуля email.charset
.
-
class
email.charset.
Charset
(input_charset=DEFAULT_CHARSET) Сопоставляет множества символов с их свойствами электронной почты.
Данный класс предоставляет информацию о требованиях, предъявляемых к электронной почте для определенных множеств символов. Он также предоставляет удобные подпрограммы для преобразования между символами при наличии применимых кодеков. Учитывая множество символов, он сделает все возможное, чтобы предоставить информацию о том, как использовать данные символы в сообщении электронной почты в соответствии с RFC.
Некоторые символы должны быть закодированы с помощью quoted-printable или base64 при использовании в заголовках или тексте электронной почты. Некоторые символы должны преобразовываться напрямую и не разрешены в электронной почте.
Необязательный input_charset описан ниже; он всегда приводится к нижнему регистру. После нормализации псевдонима он также используется для поиска в реестре символов, чтобы узнать кодировку заголовка, кодировку тела и кодек преобразования вывода, который будет использоваться для символов. Например, если input_charset — это
iso-8859-1
, то заголовки и тела будут закодированы с использованием quoted-printable, и кодек преобразования вывода не требуется. Если input_charset равенeuc-jp
, то заголовки будут закодированы с помощью base64, тела не будут закодированы, но выходной текст будет преобразован из символовeuc- jp
в символыiso-2022-jp
.У экземпляров
Charset
есть следующие атрибуты данных:-
input_charset
Содержит начальное множество символов. Общие псевдонимы преобразуются в их официальные имена электронной почты (например,
latin_1
преобразуются вiso-8859-1
). По умолчанию используется 7-битныйus-ascii
.
-
header_encoding
Если символы должны быть закодированы, прежде чем их можно использовать в заголовке электронной почты, для этого атрибута будет установлено значение
Charset.QP
(для quoted-printable),Charset.BASE64
(для кодировки base64) илиCharset.SWORTEST
для самой короткой кодировки QP или BASE64. В противном случае будетNone
.
-
body_encoding
То же, что и header_encoding, но определяет кодировку тела почтового сообщения, которая действительно может отличаться от кодировки заголовка.
Charset.SHORTEST
не допускается для body_encoding.
-
output_charset
Некоторые символы необходимо преобразовать, прежде чем их можно будет использовать в заголовках или тексте электронной почты. Если input_charset является одним из них, данный атрибут будет содержать имя множества символов, в который будут преобразованы выходные данные. В противном случае это будет
None
.
-
input_codec
Имя Python кодека, используемого для преобразования input_charset в Юникод. Если кодек преобразования не требуется, данный атрибут будет
None
.
-
output_codec
Имя Python кодека, используемого для преобразования Юникод в output_charset. Если кодек преобразования не требуется, данный атрибут будет иметь то же значение, что и input_codec.
Экземпляры
Charset
также имеют следующие методы:-
get_body_encoding
() Возвращает кодировку передачи содержимого, используемую для кодирования тела.
Это либо
quoted-printable
строка, либоbase64
в зависимости от используемой кодировки, либо это функция, и в этом случае вы должны вызывать функцию с одним аргументом, при этом кодируется Message объект. Затем функция должна установить для самого заголовка Content-Transfer-Encoding любое подходящее значение.Возвращает строку
quoted-printable
, если body_encoding — этоQP
, возвращает строкуbase64
, если body_encoding — этоBASE64
и возвращает7bit
строку в противном случае.
-
get_output_charset
() Возвращает выходное множество символов.
Это атрибут output_charset, если это не
None
, иначе input_charset.
-
header_encode
(string) Заголовочное кодирование строки string.
Тип кодировки (base64 или quoted-printable) будет основан на атрибуте header_encoding.
-
header_encode_lines
(string, maxlengths) Заголовочное кодирование string, преобразовав его в байты.
Походит на
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
для quoted-printable,Charset.BASE64
для кодировки base64,Charset.SHORTEST
для самой короткой quoted-printable или кодировки base64, либоNone
без кодировки.SHORTEST
действителен только для header_enc. По умолчанию используетсяNone
без кодировки.Необязательный output_charset — это множество символов, в котором должны быть выходные данные. Преобразования будут выполняться из входной кодировки в Юникод и в выходную кодировку при вызове метода
Charset.convert()
. По умолчанию выводится в том же множестве символов, что и ввод.У input_charset и output_charset должны быть записи Юникод кодека в сопоставлении набора символов модуля с кодеком; используйте
add_codec()
для добавления кодеков, о которых модуль не знает. Дополнительную информацию см. в документации модуляcodecs
.Глобальный реестр множеств символов хранится в глобальном словаре модуля
CHARSETS
.
-
email.charset.
add_alias
(alias, canonical) Добавляет псевдоним множества символов. alias — псевдоним, например
latin-1
. canonical — это каноническое имя множества символов, напримерiso-8859-1
.Глобальный реестр псевдонимов кодировки хранится в глобальном словаре модуля
ALIASES
.
-
email.charset.
add_codec
(charset, codecname) Добавляет кодек, который сопоставляет символы заданного множества символов с Юникодом и обратно.
charset — это каноническое имя множества символов. codecname — это имя кодека Python, соответствующее второму аргументу метода
encode()
str
.