email.charset: Представление наборов символов
Этот модуль предоставляет класс Charset для представления наборов символов и преобразований наборов символов в электронных письмах, а также реестр наборов символов и несколько удобных методов для управления этим реестром. Экземпляры Charset используются в нескольких других модулях в пакете email.
Импортируйте этот класс из модуля email.charset.
Введено в версии 2.2.2.
-
class email.charset.Charset([input_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в противном случае.
-
convert(s) -
Преобразует строку s из input_codec в output_codec.
-
to_splittable(s) -
Преобразует, возможно, многобайтовую строку в формат, безопасный для разделения. s — это строка для разделения.
Использует input_codec для попытки преобразования строки в Unicode, чтобы она могла быть безопасно разделена на границах символов (даже для многобайтовых символов).
Возвращает строку как есть, если неизвестно, как преобразовать s в Unicode с помощью input_charset.
Символы, которые не удалось преобразовать в Unicode, будут заменены символом замены Unicode
'U+FFFD'.
-
from_splittable(ustr[, to_output]) -
Преобразует строку, разбиваемую по разделителям, обратно в закодированную строку. ustr — это строка Юникод для «раздвоения».
Этот метод использует соответствующий кодек для попытки преобразования строки из Юникода обратно в закодированный формат. Возвращает строку как есть, если она не является строкой Юникод или если её не удалось преобразовать из Юникода.
Символы, которые не удалось преобразовать из Unicode, будут заменены соответствующим символом (обычно
'?').Если to_output равен
True(по умолчанию), используется output_codec для преобразования в закодированный формат. Если to_output равенFalse, используется input_codec.
-
get_output_charset() -
Возвращает набор символов вывода.
Это атрибут output_charset, если он не равен
None, в противном случае это input_charset.
-
encoded_header_len() -
Возвращает длину закодированной строки заголовка, правильно учитывая кодировку quoted-printable или base64.
-
header_encode(s[, convert]) -
Кодирует заголовок строки s.
Если convert равен
True, строка будет автоматически преобразована из набора символов ввода в набор символов вывода. Это не полезно для многобайтовых наборов символов, которые имеют проблемы с длиной строки (многобайтовые символы должны быть разделены на символ, а не на байт); используйте классHeaderболее высокого уровня для решения этих проблем (см.email.header). convert по умолчанию равенFalse.Тип кодировки (base64 или quoted-printable) будет основан на атрибуте header_encoding.
-
body_encode(s[, convert]) -
Кодирует тело строки s.
Если convert равен
True(по умолчанию), строка будет автоматически преобразована из набора символов ввода в набор символов вывода. В отличие от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_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-кодека, как это подходит для второго аргумента встроенной функции
unicode()или для методаencode()строки Юникода.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/email.charset.html