Юникод и тип bytes

junikod i tip bytes Системные инструменты

Строго говоря, история со строками в Python 3.X гораздо богаче, чем можно было бы заключить из вышесказанного. До сих пор было продемонстрировано, что объекты типа str являются последовательностями символов (точнее — «кодовыми пунктами» Юникода, представляющими «элементы» Юникода), которые могут быть не только символами ASCII, но и многобайтовыми символами Юникода и предусматривают возможность кодирования и декодирования вручную или автоматически при выполнении операций с текстовыми файлами. Строки в программном коде заключаются в кавычки (например, abc) и допускают использование дополнительного синтаксиса для представления символов, не входящих в набор ASCII (например, ‘\xc4\xe8’, ‘\u00c4\u00e8’).

Однако на самом деле в Python 3.X имеется два дополнительных строковых типа, поддерживающих большинство операций, которыми обладает тип str: тип bytes — последовательность коротких целых чисел для представления 8-битовых двоичных данных и тип bytearray — изменяемый вариант типа bytes. Как вы уже знаете, присутствие символа «b» перед открывающей кавычкой (например, babc’, b’\xc4\xe8’) говорит о том, что вы имеете дело с объектом типа bytes. Как будет показано в главе 4, файлы в Python 3.X также проявляют подобную двойственность: при работе в текстовом режиме используется тип str (при этом предусматриваются преобразования символов конца строки и символов Юникода, в соответствии с указанной кодировкой), а при работе в двоичном режиме используется тип bytes (в этом случае данные при чтении/записи не подвергаются преобразованиям). В главе 5 мы увидим такое же деление при работе с такими инструментами, как сокеты, которые на сегодняшний день работают со строками байтов

Текст Юникода используется в интернационализированных приложениях, и многие инструменты языка Python, ранее ориентированные на работу с двоичными данными, в настоящее время работают со строками байтов. К ним относятся некоторые инструменты для работы с файлами, которые мы встретим далее, такие как функция open, а также инструменты os.listdir и os.walk, которые мы будем изучать в последующих главах. Как будет показано ниже, даже простые инструменты для работы с каталогами должны иметь возможность обрабатывать символы Юникода в содержимом и в именах файлов. Кроме того, инструменты для сериализации объектов и анализа двоичных данных на сегодняшний день ориентированы на работу со строками байтов.

Далее в этой книге мы также увидим, что в настоящее время Юникод используется для представления текста в графических интерфейсах; для обмена данными по сети, в виде последовательностей байтов; в стандартных инструментах Интернета, таких как электронная почта; и даже в некоторых механизмах сохранения объектов, таких как файлы DBM и модуль shelve. Любой интерфейс, предусматривающий работу с текстом, на сегодняшний день обязательно предусматривает работу с Юникодом, потому что тип str представляет строки символов Юникода, а не только ASCII. Как только мы в этой книге доберемся до сферы программирования приложений, для большинства программистов на Python 3.X тема Юникода перестанет быть необязательной.

Мы отложим дальнейшее обсуждение Юникода, пока нам не представится возможность увидеть его в прикладном контексте и в практических программах. Более фундаментальное освещение поддержки текстовых и двоичных данных Юникода в строках и файлах вы найдете в четвертом издании книги «Изучаем Python». Эта книга официально посвящена основам языка, что предполагает углубленное рассмотрение тем и позволило отвести этой теме отдельную главу, занимающую 45 страниц.

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

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