Skip to content

Unicode

Первый шаг к разрешению проблем с кодировками был сделан в 1991 году — появилась первая версия стандарта кодирования символов — Unicode (Юникод). Unicode состоит из двух частей: таблицы кодировки символов и набора правил кодирования числовых кодов в машинном носителе информации.

Юникод ещё не завершён. Как и в случае с любым стандартом, в него что-то добавляется, убирается, предлагается новое.

Стандарт Юникод определяет коды для символов основных современных языков. Это европейские алфавитные письменности, ближневосточные письменности справа налево и многие письменности Азии.

Стандарт также содержит знаки пунктуации, диакритические знаки, математические символы, технические символы, стрелки, дингбаты, эмодзи и т. д.

Последняя версия Юникод под номером 14.0.0. насчитывает в общей сложности 144697 символов.

Таблица кодировки символов

Все символы в Unicode сгруппированы в блоки. Блоки же группируются в плоскости. Плоскость — непрерывный диапазон из \(65536 = 2^{16}\) кодовых позиций.

Существует 17 плоскостей, обозначенных числами от \(0\) до \(16\). Плоскость \(0\) называется Основная многоязычная плоскость (англ. Basic Multilingual Plane, BMP), она содержит наиболее часто используемые символы. Кириллица располагается в диапазоне \(0400\)\(04FF\).

Основная многоязычная плоскость

Основная многоязычная плоскость

Остальные плоскости (\(1\)\(16\)) называются дополнительными.

Правила кодирования

Unicode Transform Protocol (UTF) — набор правил преобразования номеров ячеек таблицы Юникод в бинарные коды. Существуют разные типы UTF. Они различаются количеством битов, используемых для кодировки одного знака.

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

Но если у нас есть три разные кодировки, то как узнать, какая из них применяется в конкретном файле? Для этого используют специальный маркер в начале файла, который говорит о том, какая именно кодировка тут применена.

UTF-32

Стандарт кодирования, преобразующий номера ячеек таблицы Юникод в бинарные коды с использованием 4 байт (32 бит) на каждый символ. Символ UTF-32 является прямым представлением его кодовой позиции.

Главный недостаток UTF-32 — это неэффективное использование машинного пространства, так как для хранения символа используется целых четыре байта.

UTF-16

Позволяет кодировать символы таблицы Юникод с помощью 2 или 4 байтных значений (16 и 32 бита соответственно).

Символы с номерами \(0-55295\) и \(57344-65535\) кодируются с помощью 2 байт без изменений, а остальные символы, номера которых в двоичном представлении формируются количеством байт больше 2, кодируются 4 байтами с использованием специального алгоритма.

UTF-8

Символы с кодами меньше \(128\) представляются одним байтом, а так как в Юникоде они повторяют ASCII, то текст написанный только этими символами будет являться текстом в ASCII. Символы же с кодами от \(128\) кодируются двумя байтами, с кодами от \(2048\) — тремя, от \(65536\) — четырьмя.

Так можно было бы и до 6-ти байт дойти, но кодировать ими уже ничего.

Запись символов юникода

Для обозначения символов Unicode используется запись вида U+xxxx (для кодов \(0-FFFF\)), или U+xxxxx (для кодов \(10000-FFFFF\)), или U+xxxxxx (для кодов \(100000-10FFFF\)), где x — шестнадцатеричная цифра.

Например эмоджи 😴 имеет код U+1F634.

Список использованных источников

  1. Kealan Parr. Unicode Characters – What Every Developer Must Know About Encoding [Электронный ресурс] URL: https://www.freecodecamp.org/news/everything-you-need-to-know-about-encoding/ (дата обращения: 12.07.2022)
  2. Алексей Ваганов. UTF-8: Кодирование и декодирование [Электронный ресурс] URL: https://habr.com/ru/users/poofeg/ (дата обращения: 12.07.2022)
  3. Этот восхитительный Юникод [Электронный ресурс] URL: https://habr.com/ru/post/485148/ (дата обращения: 12.07.2022)
  4. Maya Posch. UNICODE: ON BUILDING THE ONE CHARACTER SET TO RULE THEM ALL [Электронный ресурс] URL: https://hackaday.com/2021/03/17/unicode-on-building-the-one-character-set-to-rule-them-all/ (дата обращения: 12.07.2022)
  5. UTF-8 [Электронный ресурс] URL: https://ru.wikipedia.org/wiki/UTF-8 (дата обращения: 12.07.2022)
  6. About Versions of the Unicode® Standard [Электронный ресурс] URL: https://www.unicode.org/versions/ (дата обращения: 12.07.2022)

Last update: July 14, 2022
Created: July 14, 2022

Comments