Unicode
Кодовые страницы помогли компьютерной индустрии решить проблемы I18N в течение некоторого времени, но вскоре выяснилось, что они не будут постоянным решением.
Концепция, которая решила проблему в долгосрочной перспективе, был Unicode.
Unicode назначает уникальные (однозначные) символы (буквы, дефисы, иероглифы и т.д.) Более чем миллиону кодовых точек. Первые 128 кодовых точек Unicode идентичны ASCII, а первые 256 кодовых точек Unicode идентичны кодовой странице ISO/IEC 8859-1 (кодовая страница, предназначенная для западноевропейских языков).
UCS-4
Стандарт Unicode ничего не говорит о том, как кодировать и хранить символы в памяти и файлах. Он только называет все доступные символы и назначает их плоскостям (группа символов схожего происхождения, приложения или природы).
Существует более одного стандарта, описывающего методы, используемые для реализации Unicode на реальных компьютерах и компьютерных системах хранения. Наиболее общим из них является UCS-4.
Название происходит от универсального набора символов.
UCS-4 использует 32 бита (четыре байта) для хранения каждого символа, а код - это просто уникальный номер кодовых точек Unicode. Файл, содержащий кодированный в UCS-4 текст, может начинаться с BOM (метки порядка байтов), непечатаемой комбинации битов, объявляющих природу содержимого файла. Некоторые утилиты могут требовать этого.
Как видите, UCS-4 является довольно расточительным стандартом - он увеличивает размер текста в четыре раза по сравнению со стандартным ASCII. К счастью, существуют более разумные формы кодирования текстов в Юникоде.
UTF-8
Одним из наиболее часто используемых является UTF-8.
Название происходит от формата преобразования Unicode.
Концепция очень умная. UTF-8 использует столько битов для каждой кодовой точки, сколько необходимо для их представления.
Например:
- все латинские символы (и все стандартные символы ASCII) занимают восемь битов;
- нелатинские символы занимают 16 бит;
- Идеографы CJK (Китай-Япония-Корея) занимают 24 бита.
Из-за особенностей метода, используемого UTF-8 для хранения кодовых точек, нет необходимости использовать спецификацию, но некоторые инструменты ищут ее при чтении файла, и многие редакторы настраивают ее во время сохранения.
Python 3 полностью поддерживает Unicode и UTF-8:
- вы можете использовать символы в кодировке Unicode/UTF-8 для именования переменных и других объектов;
- вы можете использовать их во время всего ввода и вывода.
Это означает, что Python3 полностью интернационализирован.