Документация Python неофициальный перевод

email.charset: Представление наборов символовemail.charset: Representing character sets

Исходный код: Lib/email/charset.py


Этот модуль является частью устаревшего API электронной почты (Compat32). В новом API используется только таблица псевдонимов.

Оставшийся текст в этом разделе является оригинальной документацией модуля.

Этот модуль предоставляет класс 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, и никакой кодек выходного преобразования не требуется. Если 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.SHORTEST для наименьшего из QP или BASE64. В противном случае он будет равен None.

body_encoding

То же, что и header_encoding, но описывает кодировку для тела почтового сообщения, которая действительно может отличаться от кодировки заголовка. Charset.SHORTEST не допускается для body_encoding.

output_charset

Некоторые наборы символов должны быть преобразованы перед использованием в заголовках или телах писем. Если input_charset является одним из них, этот атрибут будет содержать имя набора символов, в который будет преобразован вывод. В противном случае он будет равен None.

input_codec

Имя кодека Python, используемого для преобразования input_charset в Unicode. Если кодек преобразования не требуется, этот атрибут будет равен None.

output_codec

Имя кодека Python, используемого для преобразования Unicode в 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 – это кодировка, в которой должен быть вывод. Преобразования будут выполняться от входной кодировки к Unicode, а затем к выходной кодировке при вызове метода Charset.convert(). По умолчанию вывод производится в той же кодировке, что и вход.

Оба параметра input_charset и output_charset должны иметь записи кодеков Unicode в сопоставлении набора символов с кодеками модуля; используйте add_codec() для добавления кодеков, о которых модуль не знает. См. документацию модуля codecs для получения дополнительной информации.

Глобальный реестр кодировок хранится в глобальном словаре модуля CHARSETS.

email.charset.add_alias(alias, canonical)

Добавляет псевдоним кодировки. alias – это имя псевдонима, например latin-1. canonical – это каноническое имя кодировки, например iso-8859-1.

Глобальный реестр псевдонимов кодировок хранится в глобальном словаре модуля ALIASES.

email.charset.add_codec(charset, codecname)

Добавляет кодек, который преобразует символы из заданной кодировки в Unicode и обратно.

charset – это каноническое имя кодировки. codecname – это имя кодека Python, подходящее для второго аргумента метода encode() объекта str.