В предыдущем посте мы рассмотрели ASCII-код - истоки цифровых символов. Несмотря на то, что ASCII был отличным, его место в 128 символов оказалось недостаточным для отражения языков всего мира.

Сегодня мы поговорим о Юникоде (Unicode) - великом соглашении, объединяющем все символы, включая корейский, китайские иероглифы, арабский и даже эмодзи, превышающем пределы ASCII.


В начале интернета было довольно часто встречать ситуацию, когда при подключении к websites другой страны вместо текста на экране появлялись символы, такие как . Это явление называется 'модзибаке (Mojibake)'.

Причина была проста. Каждая страна и языковая группа использовали различные наборы символов (Encoding). Одни компьютеры интерпретировали одни и те же двоичные данные как "это корейский", в то время как другие могли увидеть их как "это западноевропейский язык".

Спасителем, пришедшим успокоить путаницу в цифровой башне Babel, стал Юникод (Unicode).

Вокруг земного шара разнообразные символы из различных языков

1. Что такое Юникод?



Юникод (Unicode) - это сокращение от "Universal Code", который присваивает уникальные номера (Code Point) всем символам мира в международном стандарте.

Если ASCII-код имеет номера от 0 до 127, то Юникод фактически расширяет этот диапазон до бесконечности. На данный момент в Юникоде зарегистрировано более 140 000 символов, включая как современные языки, так и древние иероглифы, ноты и эмодзи, которые мы используем каждый день.

Кодовая точка (Code Point)

Юникод управляет каждым символом, придавая ему шестнадцатеричный номер, начинающийся с U+.

  • Латинский символ 'A': $U+0041$ (такой же, как и ASCII-код)

  • Корейский '가': $U+AC00$

  • Китайский '日': $U+65E5$

  • Эмодзи '😀': $U+1F600$

Теперь все компьютеры по всему миру, получая сигнал $U+1F600$, могут одинаково ассоциировать его со смайлом (😀), независимо от языковых настроек.

2. Является ли Юникод и UTF-8 одним и тем же?

Многие люди путают эти два термина. "Юникод" и "UTF-8" - это разные вещи. Понимание их взаимосвязи является ключом к сегодняшней статье.

  • Юникод: это 'карта (Map)', которая связывает символы и числа. (абстрактное соглашение)

  • UTF-8 (Encoding): это 'метод упаковки (Method)' этих чисел в память компьютера.

Если Юникод - это 'каталог', который присваивает идентификационные номера всем объектам в мире, то UTF-8 - это 'технология', позволяющая упаковать эти объекты в коробки для перевозки грузовиком.

3. Почему UTF-8 стал стандартом?



Существует несколько способов (кодировки), с помощью которых можно хранить символы Юникода, такие как UTF-16, UTF-32 и другие. Однако более 98% интернет-пространства использует UTF-8.

Причина успеха UTF-8 заключается в его 'изменяемой длине (Variable Width)', что делает его невероятно эффективным. Он выделяет разное количество памяти (байтов) в зависимости от типа символа.

Тип символа Пример Номер Юникода Размер хранения в UTF-8 Характеристика
Основной латинский A $U+0041$ 1 Byte 100% совместимый с ASCII-кодом
Семитские/Европейские языки Ω, ¶ $U+03A9$ 2 Bytes Латинское расширение, греческий и др.
CJK (Корейский, Китайский, Японский) 한, 中, あ $U+D55C$ 3 Bytes Большинство азиатских символов
Эмодзи/Древние языки 🚀 $U+1F680$ 4 Bytes Символы, выходящие за рамки плоскости

Преимущества UTF-8

  1. Совместимость с ASCII: При сохранении английских документов размер такой же, как и у ASCII-кода. Полностью совместимо с существующими системами.

  2. Эффективность: Часто используемые англоязычные символы хранятся коротко (1 байт), а сложные символы могут занимать больше места для оптимизации общего объема.

4. На что разработчикам стоит обратить внимание при работе с Юникодом

В отличие от времен, когда символы состояли только из 1 байта (ASCII), в окружении Юникода необходимо быть внимательным при подсчете "длины строки".

  • С точки зрения памяти (байт): 'A' - 1, '한' - 3.

  • С точки зрения символов: 'A' - 1 символ, '한' - также 1 символ.

Использование старого метода для обрезки или сохранения строки может привести к повреждению данных, если разрывается многобайтовый символ (корейский, китайский и др.). Поэтому современные языки программирования обычно включают библиотеки, автоматически поддерживающие обработку Юникода.


Резюме

  1. Юникод: международный стандарт, присваивающий уникальные номера (Code Point) всем символам мира.

  2. Цель: Объединение различных способов кодирования, существовавших в разных языках, для устранения проблемы разбивания символов (модзибаке).

  3. UTF-8: Самый эффективный способ хранения Юникода. Английский занимает 1 байт, корейские/китайские/японские символы - 3 байта.

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


🚀 Анонс следующей статьи

Теперь, когда мы узнали, как мы сохраняем текст (кодировка), пришло время разобраться, как обрабатывать данные более эффективно. "Как изображения сохраняются в виде 0 и 1?" Мы подробно и просто рассмотрим принцип работы пикселей, разрешения и RGB цветов.

👇 Другие статьи, которые вам могут понравиться


Если вы нашли информацию полезной, пожалуйста, подписывайтесь, чтобы не пропустить другие рассказы о IT-технологиях!