- Часть I. Вводное руководство
- Глава 2. Использование интерпретатора
- 2.2. Интерпретатор и его среда
- 3.1.3. Строки Unicode
3.1.3. Строки Unicode
Начиная с версии 1.6, в языке Python доступен новый тип данных для хранения текста — строка Unicode. Его можно использовать для работы с текстом, содержащим одновременно буквы и символы нескольких языков, доступных в Unicode (см.
Unicode имеет значительное преимущество — предоставляет возможность использовать все символы, используемые в современных и древних текстах. Ранее мы могли использовать только 256 символов из определенной кодовой страницы, что приводило к большим затруднениям, особенно при интернационализации (internationalization, обычно записывается как i18n — i + 18 символов + n) программного обеспечения. Unicode решает эту проблему, определяя одну кодовую страницу для всех символов.
Создаются строки Unicode настолько же просто, как и обычные строки:
>>> u'Hello World !'
u'Hello World !'
Маленькая буква 'u' перед кавычками указывает, что предполагается создание строки Unicode. Если Вы хотите включить в строку специальные символы, используйте управляющие последовательности:
>>> u'Hello\u0020World !'
u'Hello World !'
Управляющая последовательность \u0020 указывает, что необходимо вставить Unicode символ с порядковым номером в шестнадцатеричной системе исчисления 0x0020 (пробел).
Благодаря тому, что первые 256 символов Unicode те же, что и в стандартной кодировке Latin-1, ввод текста на большинстве языков, используемых в западных странах, сильно упрощается.
Как и для обычных строк, для строк Unicode существует "необрабатываемый" режим, задаваемый с помощью буквы 'r' или 'R' перед кавычками. Управляющими считаются только последовательности, которые применяются для обозначения символов Unicode, и только если используется нечетное количество символов обратной косой черты перед буквой 'u':
>>> ur'Hello\u0020World !'
u'Hello World !'
>>> ur'Hello\\u0020World !'
u'Hello\\\\u0020World !'
Кроме описанного выше метода, Python предоставляет возможность создать строку Unicode на основе строки в известной кодировке. Встроенная функция unicode() может работать с Latin-1, ASCII, UTF-8, UTF-16, с русскими кодировками ISO-8859-5, KOI8-R, CP1251, CP866 и Mac-cyrillic, и многими другими. Python по умолчанию использует кодировку ASCII1, например, при выводе на экран инструкцией print и записи в файл. Если у Вас есть данные в определенной кодировке, для получения строки Unicode используйте встроенную функцию unicode(), указав кодировку в качестве второго аргумента:
>>> s = unicode("Привет", "KOI8-R")
>>> s
u’\u041F\u0440\u0438\u0432\u0435\u0442’
Если строка Unicode содержит символы с кодом больше 127, преобразование в ASCII не возможно:
>>> str(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordin
al not in range(128)
Метод encode() позволяет преобразовывать строки Unicode в обычные строки, содержащие текст в указанной кодировке:
>>> s.encode("KOI8-R")
'\360\322\311\327\305\324'
>>> s.encode("UTF-8")
'\320\237\321\200\320\270\320\262\320\265\321\202'
- ASCII является общей частью для подавляющего большинства кодировок. Вы можете изменить кодировку по умолчанию с помощью функции sys.set_string_encoding(). Однако лучше все же указывать ее явно.