Конвертер Unicode
Взаимное преобразование текста и Unicode кодировки с поддержкой различных форматов вывода
Детали кодовых точек символов (нажмите для копирования)
Что такое Unicode?
Unicode (Уникод) — это отраслевой стандарт в информатике, который упорядочивает и кодирует большинство письменных систем мира. Каждый символ Unicode имеет уникальный номер — кодовую точку (Code Point), обычно записываемую в шестнадцатеричном формате с префиксом U+, например U+4E2D для китайского иероглифа «中». Инструмент конвертации Unicode позволяет преобразовывать текст в различные форматы представления Unicode и восстанавливать текст из Unicode-кодов. Unicode описывает символы через code points, а кодировки вроде UTF-8 определяют, как эти code points хранятся в байтах. Это важно при анализе текста с emoji, accents, CJK-символами, symbols, управляющими символами и смешанными письменностями. Один видимый символ может состоять из нескольких code points, особенно с combining marks, variation selectors и emoji sequences. Инструмент помогает отлаживать mojibake, normalization, escape sequences, невидимые символы и расхождения между количеством символов и byte length.
Как пользоваться
Шаги
- Введите или вставьте текст для конвертации в поле ввода
- Выберите направление конвертации: Текст в Unicode или Unicode в Текст
- Выберите формат вывода: \uXXXX или U+XXXX (доступно при кодировании)
- Результаты появляются автоматически; доступно копирование или обмен ввода/вывода одним нажатием
Примечания по кодированию
- Форматы Unicode-экранирования удобны для кода и отладки, но снижают читаемость обычного текста.
- При декодировании следите за суррогатными парами и выводом эмодзи: разрыв пары даёт нечитаемые символы.
Применение
Технический принцип
Стандарт Unicode (ISO/IEC 10646) назначает уникальный числовой код каждому символу на 17 плоскостях (от U+0000 до U+10FFFF). Основная многоязычная плоскость (BMP, плоскость 0) охватывает диапазон U+0000–U+FFFF и содержит практически все современные системы письма, включая единые идеограммы CJK. Дополнительные плоскости (1–16) включают исторические письменности, редкие иероглифы CJK, эмодзи и специальные символы. Инструмент выполняет преобразование между читаемым текстом и двумя машинно-ориентированными представлениями: escape-последовательностями \uXXXX в стиле JavaScript и стандартной нотацией U+XXXX. UTF-16 — внутренняя кодировка строк JavaScript: каждый символ BMP хранится как один 16-битный элемент кода, равный его кодовой точке, а дополнительные символы (U+10000 и выше) кодируются суррогатными парами: из кодовой точки вычитается 0x10000, оставляя 20-битное значение, которое затем разделяется на 10-битный старший суррогат (0xD800 + ((cp - 0x10000) >> 10)) и 10-битный младший суррогат (0xDC00 + ((cp - 0x10000) & 0x3FF)). Режим кодирования инструмента определяет дополнительные кодовые точки с помощью String.prototype.codePointAt() и генерирует корректную двухсимвольную escape-последовательность для формата \uXXXX. Для формата U+XXXX полная кодовая точка выводится напрямую. Режим декодирования анализирует три синтаксиса: \uXXXX (четыре шестнадцатеричных цифры, только BMP), \u{XXXXX} (фигурные скобки ES6, поддерживающие полный диапазон Unicode) и U+XXXX (стандартная нотация с переменной длиной шестнадцатеричного числа). Регулярное выражение /\\u\{([0-9a-fA-F]+)\}/g обрабатывает escape-последовательности в фигурных скобках и передаёт их в String.fromCodePoint(), а /\\u([0-9a-fA-F]{4})/g обрабатывает традиционные escape-последовательности через String.fromCharCode(). Корректное сочетание обоих паттернов восстанавливает суррогатные пары, когда дополнительный символ был закодирован двумя escape-последовательностями \u. Кодировка UTF-8 важна, поскольку определяет длину в байтах: символ BMP, например «中» (U+4E2D), кодируется как 3 байта UTF-8 (E4 B8 AD), а эмодзи «😀» (U+1F600) требует 4 байта (F0 9F 98 80). Счётчик символов инструмента различает количество кодовых точек и количество 16-битных элементов кода UTF-16 — это полезно при отладке ограничений длины в базах данных, API или полях форм, которые подсчитывают элементы кода, а не символы.
- Итерация по кодовым точкам: String.prototype.codePointAt(pos) корректно возвращает полную кодовую точку для дополнительных символов, в отличие от charCodeAt(), который возвращает только старший суррогат — инструмент использует оператор расширения [...str] для итерации по кодовым точкам, который внутренне вызывает протокол итератора строк.
- Математика суррогатных пар: для дополнительной кодовой точки CP > 0xFFFF старший суррогат вычисляется как Math.floor((CP - 0x10000) / 0x400) + 0xD800, а младший — как ((CP - 0x10000) % 0x400) + 0xDC00; режим кодирования применяет эту формулу для генерации корректных пар \uD800\uDC00.
- Конвейер декодирования с регулярными выражениями: три паттерна выполняются последовательно — \u{XXXXX} (фигурные скобки ES6) → \uXXXX (четырёхзначный hex) → U+XXXX (стандартная нотация) — при этом fromCodePoint() обрабатывает пути с фигурными скобками и U+, а fromCharCode() — традиционный четырёхзначный путь.
- Байтовая структура UTF-8: символы BMP используют 1–3 байта UTF-8 (ASCII = 1 байт, латинский дополнительный набор = 2 байта, CJK = 3 байта); дополнительные символы используют 4 байта по схеме 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx — счётчик байтов инструмента использует new Blob([str]).size для точного измерения.
- Кодовые точки и элементы кода: один видимый символ может занимать несколько кодовых точек (например, «é» может быть U+00E9 или U+0065 + U+0301 с объединяющим акутом) — инструмент выводит как charCount (элементы кода UTF-16), так и codepointCount (скалярные значения Unicode), чтобы выявить это расхождение.
- Обзор плоскостей Unicode: плоскость 0 (BMP) = современные системы письма, плоскость 1 (SMP) = исторические символы + эмодзи + математические символы, плоскость 2 (SIP) = редкие CJK, плоскость 14 (SSP) = теги + селекторы вариаций, плоскости 15–16 = частное использование — режим кодирования корректно обрабатывает все плоскости через codePointAt().
- Нотация \u и U+: \uXXXX — escape-последовательность JavaScript/Java/C (только без фигурных скобок для BMP); U+XXXX — каноническая нотация Unicode Consortium (минимум 4 шестнадцатеричных цифры, без верхнего предела) — переключатель формата инструмента переключает между этими представлениями.
Примеры
Китайский в Unicode-escape
Вход: 你好世界 (4 символа CJK, 12 байт UTF-8)
Выход: \u4f60\u597d\u4e16\u754c
Примечание: только кодовые точки BMP; полезно в JSON-строках, литералах JavaScript и лог-файлахЭмодзи в escape-последовательность суррогатной пары
Вход: 😀🎉 (2 эмодзи, каждый выше U+FFFF)
Выход: \uD83D\uDE00\uD83C\uDF89
Примечание: символы вне BMP кодируются как суррогатная пара UTF-16; старым движкам JS нужен String.fromCodePoint для корректного round-tripДекодирование Unicode-escape
Вход: \u4e2d\u6587\u6d4b\u8bd5
Выход: 中文测试
Примечание: вставьте экранированную строку, и инструмент выполнит обратное преобразование; при отладке проблем с CJK сверяйте байты выхода с источникомЧасто задаваемые вопросы
Что инструмент показывает по каждому символу?
Кодовую точку (в десятичном и шестнадцатеричном виде), название блока (например, Basic Latin, CJK Unified Ideographs), категорию (Letter, Number, Symbol, Punctuation и т. д.), Unicode-имя, а также представления в UTF-8 / UTF-16 / UTF-32. Полезно при отладке проблем с кодировкой и при выборе нужного символа.
В чём разница между UTF-8, UTF-16 и UTF-32?
Все три кодируют одни и те же символы Unicode. UTF-8 использует 1–4 байта на кодовую точку и совместим с ASCII по байтам (доминирующая веб-кодировка). UTF-16 использует 2 или 4 байта (применяется внутри JavaScript и Windows). UTF-32 всегда использует 4 байта (редко встречается в передаче, часто — в памяти).
Почему «𝓗» отображается как два UTF-16 кода?
Кодовые точки выше U+FFFF (Basic Multilingual Plane) кодируются в UTF-16 «суррогатной парой» — двумя 16-битными половинами. string.length в JavaScript считает их как 2; Array.from(str) — как одну. Страница показывает оба представления, чтобы можно было разобраться с неожиданностями подсчёта длины.
Что такое формы нормализации (NFC/NFD/NFKC/NFKD)?
Unicode допускает несколько представлений одного и того же видимого текста: é может быть одной кодовой точкой (U+00E9) или e + combining acute accent (U+0065 U+0301). NFC их объединяет; NFD — разлагает. NFKC/NFKD дополнительно сворачивают совместимые символы (½ → 1/2). Всегда нормализуйте перед сравнением строк или хешированием.
Почему эмодзи иногда выглядят как квадратики?
В шрифте вашего браузера нет такого глифа. Современные эмодзи используют последовательности ZWJ (например, 👨👩👧 = man + ZWJ + woman + ZWJ + girl), для рендеринга в одно изображение нужны определённые шрифты; старые шрифты показывают три отдельные эмодзи или квадратики.
Как найти символ по имени?
Введите имя (или его часть) в поле поиска. Имена соответствуют официальному списку Unicode (LATIN SMALL LETTER A, GREEK CAPITAL LETTER OMEGA, MUSICAL SYMBOL G CLEF). У популярных эмодзи есть также «CLDR short name», который страница распознаёт.
Загружается ли мой ввод?
Нет. Поиск использует встроенную в браузер базу Unicode. Ничего не отправляется.