Юникод, интернационализация и пакет email в Python 3.1

junikod internacionalizaciya i paket email v python 3 1 Сценарии на стороне клиента

Теперь, когда я показал вам, насколько «крутыми» возможностями обладает пакет email, я, к сожалению, должен отметить, что в Python 3.1 он недостаточно функционален. Пакет email действует, как было показано выше, применительно к простым сообщениям, но некоторые его аспекты испытывают существенное влияние дихотомии строковых типов str/bytes в Python 3.X.

В двух словах: реализация пакета email в Python 3.1 до сих ориентирована на работу в царстве текстовых строк str Python 2.X. Так как в версии 3.X эти строки превратились в строки Юникода, а также потому, что многие инструменты, используемые пакетом email, ныне ориентированы на работу со строками байтов, которые не могут свободно смешиваться со строками str, неожиданно возникает множество конфликтов, вызывающих проблемы в программах, использующих этот пакет.

К моменту написания этих строк велись работы по созданию новой версии пакета email, который лучше будет обрабатывать строки bytes и поддерживать кодировки Юникода, но по общему признанию включение новой версии пакета в библиотеку Python произойдет не раньше выхода версии 3.3 — намного позже выхода этого издания книги. Некоторые исправления могут быть включены уже в версию 3.2, тем не менее, необходимо понимать, что решение всех проблем, которые порождает пакет, требует полной его модернизации.

Справедливости ради следует отметить, что это фундаментальная проблема. Электронная почта исторически была ориентирована на передачу текста, состоящего из однобайтовых символов ASCII, и обобщение ее до уровня Юникода оказалось совсем непростым делом. Фактически то же самое относится и к большей части современного Интернета — как уже говорилось выше в этой главе, протоколы FTP, POP, SMTP и даже веб-страницы, получаемые с помощью протокола HTTP, подвержены тем же проблемам. Интерпретировать пересылаемые по сети байты как текст очень просто, пока они один в один отображается в символы, но включение поддержки различных кодировок текста Юникода открывает ящик Пандоры, заполненный проблемами. В настоящее время это влечет дополнительные сложности, но, как видно на примере пакета email, это поистине грандиозная задача.

Откровенно говоря, я не хотел выпускать это издание книги, пока не будут решены проблемы в этом пакете, но решился на этот шаг, потому что на подготовку новой версии пакета email могут уйти годы (судя по всему — две версии Python). Кроме того, эти проблемы относятся к категории проблем, с которыми вам придется столкнуться при разработке полномасштабных приложений. Все течет, все изменяется, и программное обеспечение не является исключением.

Вместо этого в примерах данной книги демонстрируется новая поддержка Юникода и интернационализации, но при этом везде, где возможно, приводятся обходные решения проблем. Программы в книге в первую очередь предназначены для обучения, а не для коммерческого использования. Однако, учитывая состояние пакета email, который используется в примерах, решения, демонстрируемые здесь, могут оказаться недостаточно универсальными, и могут таить в себе дополнительные проблемы, связанные с поддержкой Юникода. На будущее — следите за информацией на веб-сайте книги (описывается в предисловии), где будут приводиться дополнительные замечания и программный код примеров с появлением новой версии пакета email. Здесь же мы будем работать с тем, что имеется.

Однако все не так плохо. В этой книге мы сможем использовать пакет email в текущем его виде для создания весьма сложных и полнофункциональных клиентов электронной почты. Как бы то ни было, он предлагает множество великолепных инструментов, включая преобразование в формат MIME и обратно, формирование и анализ сообщений, конструирование и извлечение интернационализированных заголовков, и многие другие. Есть один неприятный момент: нам придется применять некоторые обходные решения, которые, возможно, потребуется изменить в будущем, хотя некоторые программные проекты свободны от этих недостатков.

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

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

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

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