В предыдущем посте мы рассмотрели 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
-
Совместимость с ASCII: При сохранении английских документов размер такой же, как и у ASCII-кода. Полностью совместимо с существующими системами.
-
Эффективность: Часто используемые англоязычные символы хранятся коротко (1 байт), а сложные символы могут занимать больше места для оптимизации общего объема.
4. На что разработчикам стоит обратить внимание при работе с Юникодом
В отличие от времен, когда символы состояли только из 1 байта (ASCII), в окружении Юникода необходимо быть внимательным при подсчете "длины строки".
-
С точки зрения памяти (байт): 'A' - 1, '한' - 3.
-
С точки зрения символов: 'A' - 1 символ, '한' - также 1 символ.
Использование старого метода для обрезки или сохранения строки может привести к повреждению данных, если разрывается многобайтовый символ (корейский, китайский и др.). Поэтому современные языки программирования обычно включают библиотеки, автоматически поддерживающие обработку Юникода.
Резюме
-
Юникод: международный стандарт, присваивающий уникальные номера (Code Point) всем символам мира.
-
Цель: Объединение различных способов кодирования, существовавших в разных языках, для устранения проблемы разбивания символов (модзибаке).
-
UTF-8: Самый эффективный способ хранения Юникода. Английский занимает 1 байт, корейские/китайские/японские символы - 3 байта.
Юникод - это не просто технологический стандарт, а самая инклюзивная инфраструктура цифровой эпохи, позволяющая всему миру обмениваться информацией без языковых барьеров.
🚀 Анонс следующей статьи
Теперь, когда мы узнали, как мы сохраняем текст (кодировка), пришло время разобраться, как обрабатывать данные более эффективно. "Как изображения сохраняются в виде 0 и 1?" Мы подробно и просто рассмотрим принцип работы пикселей, разрешения и RGB цветов.
👇 Другие статьи, которые вам могут понравиться
Если вы нашли информацию полезной, пожалуйста, подписывайтесь, чтобы не пропустить другие рассказы о IT-технологиях!
Комментариев нет.