Новое в версии для четвертого издания (версия 3.0)

novoe v versii dlya chetvertogo izdaniya versiya 3 0 Сервер PyMailCGI

В четвертом издании веб-приложение PyMailCGI было адаптировано для работы под управлением Python 3.X. Кроме того, эта версия наследует и использует различные новые возможности, реализованные в пакете mailtools, включая декодирование и кодирование почтовых заголовков, кодирование текста сообщения, возможность ограничивать количество извлекаемых заголовков и многие другие. Особенно примечательной является новая реализация поддержки Юникода и национальных наборов символов:

     Перед отображением основной текст сообщения и его заголовки декодируются в соответствии со стандартами электронной почты, MIME и Юникода — текст декодируется с учетом информации в заголовках, а заголовки декодируются в соответствии с их содержимым.

     При необходимости перед отправкой выполняется кодирование основного текста сообщения, текстовых вложений и заголовков в соответствии с теми же стандартами, с использованием по умолчанию кодировки UTF-8.

     При создании ответов или при пересылке писем заголовки, копируемые в цитируемый текст сообщения, также декодируются для отображения.

Обратите внимание, что данная версия опирается на возможности вебброузеров отображать текст Юникода в произвольных кодировках. Она не добавляет теги «meta» с объявлением кодировки в страницах HTML, генерируемых для просмотра и составления сообщений. Например, корректно сформированный документ HTML обычно содержит объявление кодировки, как показано ниже:

<HTML><HEAD>

<META http-equiv=Content-Type content="text/html; charset=windows-1251">

</HEAD>

Подобные заголовки здесь отсутствуют. Отчасти это обусловлено тем, что почтовые сообщения могут включать текст с произвольной кодировкой и даже фрагменты с отличающимися кодировками в самих сообщениях и в заголовках, которые могут быть несовместимы с кодировкой, указанной в странице ответа HTML. Представьте себе страницу, на которой отображается список заголовков нескольких сообщений — поскольку заголовки «Subject» и «From» могут содержать различные наборы символов (один — кириллические символы, другой — китайские иероглифы и так далее), объявления единой кодировки будет недостаточно (хотя часто ситуацию может спасти универсальная кодировка UTF-8). Разрешение конфликтов при отображении таких страниц, содержащих смешанные наборы символов, остается за броузером, который, в крайнем случае, может прибегнуть к помощи пользователя в выборе кодировки. В PyMailGUI отображение разнородных наборов символов в одном окне было возможно благодаря тому, что мы передавали уже декодированный текст Юникода текстовому виджету Text из библиотеки tkinter, который прекрасно справляется с произвольными кодовыми пунктами Юникода. В PyMailCGI мы в значительной степени будем обходить эту проблему, чтобы сохранить пример как можно более простым.

Кроме того, вложения обоих типов, текстовые и двоичные, просто сохраняются в двоичном виде и открываются броузером по имени файла, если щелкнуть на ссылках, ведущих к ним; при этом в выборе правильного решения мы опять же полагаемся на броузер. На текстовые вложения в отправляемые письма также накладываются ограничения, касающиеся выгрузки файлов через CGI, описанные во врезке ниже. Помимо всего перечисленного, похоже, что в Python 3.1 имеется проблема с выводом некоторых типов текста Юникода в стандартный поток вывода в контексте CGI, для преодоления которой необходимо использовать обходное решение в главном вспомогательном модуле — открывать stdout в двоичном режиме и выводить текст в виде кодированной строки bytes (дополнительные подробности вы найдете в исходном программном коде).

Поддержка Юникода/П8п здесь не такая обширная, как в PyMailGUI. Однако, учитывая, что здесь мы не можем запросить кодировку, и принимая во внимание нехватку времени и места в книге в целом, дальнейшее усовершенствование этой поддержки для различных случаев и броузеров мы оставляем в качестве самостоятельного упражнения.

Более конкретное описание изменений, внесенных в версию 3.0, в четвертом издании вы найдете в программном коде, в комментариях, начинающихся с номера версии «3.0». Кроме того, сохранились все возможности, добавленные в предыдущем издании. Они описываются в следующем разделе.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий