Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 140

ся place_bytes:

>>> place_bytes = place.encode('utf-8')

Текстовые строки

187

>>> place_bytes

b'caf\xc3\xa9'

>>> type(place_bytes)

<class 'bytes'>

Обратите внимание на то, что переменная place_bytes содержит пять байтов.

Первые три похожи на ASCII (преимущество UTF-8), а последние два кодируют

символ «e ' ». Теперь декодируем эту байтовую строку обратно в строку Unicode:

>>> place2 = place_bytes.decode('utf-8')

>>> place2

'café'

Это сработало, поскольку мы закодировали и декодировали строку с помощью

кодировки UTF-8. Что, если бы мы указали декодировать ее с помощью какой-

нибудь другой кодировки?

>>> place3 = place_bytes.decode('ascii')

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 3:

ordinal not in range(128)

Декодер ASCII сгенерировал исключение, поскольку байтовое значение 0xc3

некорректно в ASCII. Существуют и другие восьмибитные кодировки, где значения

между 128 (80 в шестнадцатеричной системе) и 255 (FF в шестнадцатеричной

системе) корректны, но не совпадают со значениями UTF-8:

>>> place4 = place_bytes.decode('latin-1')

>>> place4

'café'

>>> place5 = place_bytes.decode('windows-1252')

>>> place5

'café'

Ох.

Мораль этой истории — используйте кодировку UTF-8 всюду, где это возмож-

но. Она работает, она поддерживается везде, вы можете с ее помощью выразить

любой символ Unicode и быстро закодировать и декодировать.

Подробная информация

Если вы хотите узнать больше, вам могут помочь следующие ссылки:

 Unicode HOWTO (http://bit.ly/unicode-howto);

 Pragmatic Unicode (http://bit.ly/pragmatic-uni);

 The Absolute Minimum Every Software Developer Absolutely, Positively Must

Know About Unicode and Character Sets (No Excuses!) (http://bit.ly/jspolsky).

188

Глава 7. Работаем с данными профессионально

Формат

До этого момента мы просто игнорировали форматирование текста. В главе 2 были

показаны несколько функций для выравнивания строк, а в примерах кода ис-

пользовалась простая функция print() или даже вывод информации на экран

поручался интерактивному интерпретатору. Но теперь мы рассмотрим, как интер-

полировать данные в строки — другими словами, разместить значения внутри