Перейти к содержанию

Unicode в глубину

Серия технических статей о стандарте Unicode — от основ до внутреннего устройства библиотек.

О проекте

Этот сайт и все статьи на нём сгенерированы нейросетью Claude Sonnet 4.6 (Anthropic) в диалоге с автором. Материалы прошли редакцию и проверку, но могут содержать неточности — всегда сверяйтесь с официальной документацией Unicode.

О серии

Unicode — это не просто «поддержка разных языков». Это сложный стандарт с базой данных символов, алгоритмами нормализации, сортировки, разбиения текста на кластеры. Эта серия разбирает Unicode изнутри: файлы стандарта, алгоритмы, реализации в Python и Node.js, исходники библиотеки ICU.

Каждая статья содержит встроенные примеры кода с ожидаемым выводом. JavaScript-примеры можно запустить прямо в браузере — кнопкой «▶ Запустить».


Статьи

1. Основы Unicode: кодовые точки, плоскости, блоки

История создания Unicode, кодовые точки, 17 плоскостей (BMP и за её пределами), блоки, скрипты и категории символов. Всё что нужно знать перед тем, как идти глубже.

2. Unicode Character Database (UCD): файлы и структура

Где живут данные Unicode и как их читать. Разбираем UnicodeData.txt, Blocks.txt, Scripts.txt, PropList.txt, EastAsianWidth.txt и другие файлы UCD вручную — без библиотек.

3. Кодировки: UTF-8, UTF-16, UTF-32

Чем кодировка отличается от кодового пространства. Алгоритм UTF-8 побайтово, суррогатные пары UTF-16, BOM (включая UTF-8 BOM). Mojibake и Unicode Sandwich.

4. Графемные кластеры: что видит пользователь

Три «длины» строки: байты, кодовые точки, графемные кластеры. Виды кластеров (диакритика, флаги, ZWJ-эмодзи, хангыль, Variation Selectors). Файл GraphemeBreakProperty.txt, алгоритм UAX #29, цепочка от UCD-данных до экрана.

5. Нормализация Unicode: NFD, NFC, NFKD, NFKC

Почему одна и та же буква может быть разными байтами. Каноническая и совместимая декомпозиция, Canonical Combining Class, обратная композиция. Где это важно: сравнение строк, пароли, безопасность, Confusables (UTS #39).

6. Коллация: Unicode Collation Algorithm и CLDR

Почему sort() врёт для большинства языков. Многоуровневые веса L1/L2/L3, таблица DUCET, локальные правила CLDR. Примеры с PyICU и Intl.Collator.

7. Unicode на практике: Linux, инструменты, исходники ICU

Утилиты uniname, iconv, hexdump. Структура репозитория ICU и как читать исходники коллации. Модуль regex с поддержкой \p{Script=Cyrillic}. Практический скрипт-анализатор Unicode-состава текста.


Ресурсы

Ссылки на спецификации, UCD-файлы, документацию библиотек — в разделе Ресурсы.