Блог
Русский

Конвертер Юникода — кодовые точки и байты UTF-8

Преобразование текста в кодовые точки Юникода, escape-последовательности и байты UTF-8 и обратно

Работает в браузере · файлы никуда не загружаются

Видимых символов: 10 · кодовых точек: 10 · длина в UTF-16: 11

Результаты

Кодовые точки (U+XXXX)

U+041F U+0440 U+0438 U+0432 U+0435 U+0442 U+0020 U+1F600 U+0020 U+D55C

JavaScript / JSON (\uXXXX)

\u041F\u0440\u0438\u0432\u0435\u0442 \uD83D\uDE00 \uD55C

ES6 (\u{...})

\u{41F}\u{440}\u{438}\u{432}\u{435}\u{442} \u{1F600} \u{D55C}

HTML, шестнадцатеричный (&#x...;)

Привет 😀 한

HTML, десятичный (&#...;)

Привет 😀 한

Байты UTF-8 (hex)

D0 9F D1 80 D0 B8 D0 B2 D0 B5 D1 82 20 F0 9F 98 80 20 ED 95 9C

Байты UTF-16BE (hex)

04 1F 04 40 04 38 04 32 04 35 04 42 00 20 D8 3D DE 00 00 20 D5 5C

Размер в разных кодировках

UTF-8
21 байт
UTF-16
22 байт
EUC-KR (CP949)
16 байт
Символов, которые нельзя записать в EUC-KR (не учтены): 1

EUC-KR (CP949) — старая корейская кодировка: 2350 слогов хангыля из KS X 1001 и ещё 8822 современных слога из расширения CP949 (UHC) занимают по 2 байта. В UTF-8 слог хангыля занимает 3 байта, эмодзи — 4. Кириллическая буква в UTF-8 занимает 2 байта.

Таблица символов

Симв.Кодовая точкаUTF-8UTF-16ДесятичныйВидимый симв.
ПU+041FD0 9F041F10551
рU+0440D1 80044010882
иU+0438D0 B8043810803
вU+0432D0 B2043210744
еU+0435D0 B5043510775
тU+0442D1 82044210906
(невидимый)U+0020200020327
😀U+1F600F0 9F 98 80D83D DE001285128
(невидимый)U+0020200020329
한U+D55CED 95 9CD55C5462010

Что это такое

Введите текст — и сразу получите все распространённые формы записи, каждую с кнопкой копирования: кодовые точки Юникода, экранирование JavaScript и JSON, форму ES6, шестнадцатеричные и десятичные HTML-мнемоники и сырые байты UTF-8 и UTF-16BE. Пригодится, чтобы безопасно вставить кириллицу и другой не-ASCII-текст в исходный код, прочитать последовательности \uXXXX в логе или понять, почему текст превратился в «кракозябры».

Инструмент также сравнивает размер в байтах в UTF-8, UTF-16 и старой корейской кодировке EUC-KR (CP949) и показывает каждую кодовую точку в таблице. Обратное направление превращает escape-последовательности или шестнадцатеричные байты снова в текст. Всё работает в браузере, ничего не сохраняется.

Как пользоваться

  1. Выберите направление: «Текст → код» или «Код → текст».
  2. Для «Текст → код» введите текст в поле. Там уже стоит пример «Привет 😀 한», поэтому результаты видны сразу.
  3. Снимите галочку «Оставлять ASCII как есть», чтобы экранировать все символы, а не только не-ASCII.
  4. Скопируйте нужный формат. Ниже — сравнение байтов и таблица символов.
  5. Для «Код → текст» оставьте «Автоопределение» для escape-последовательностей и значений U+, даже вперемешку, или выберите формат шестнадцатеричных байтов для списка байтов.
  6. Скопируйте расшифрованный текст кнопкой.

Как это работает

  • Кодовые точки записываются как U+ и шестнадцатеричное число заглавными буквами, дополненное минимум до четырёх цифр (U+0041), через пробел.
  • JavaScript / JSON: одна последовательность \uXXXX на каждую кодовую единицу UTF-16, поэтому всё начиная с U+10000 становится суррогатной парой. Форма ES6 пишет один \u{...} на кодовую точку.
  • HTML-мнемоники: один &#x…; или &#…; на кодовую точку.
  • Оставлять ASCII как есть — печатные символы ASCII (U+0020–U+007E) не меняются, кроме обратной косой черты (JavaScript) и & < > “ ’ (HTML), чтобы результат однозначно расшифровывался обратно. Переносы строк и табуляции экранируются всегда.
  • Байты UTF-8 берутся из TextEncoder браузера. UTF-16 пишет по два байта на кодовую единицу, старший байт первым (big-endian).
  • EUC-KR (CP949): обратная таблица строится расшифровкой всех двухбайтовых пар (первый байт 0x81–0xFE, второй 0x41–0xFE) декодером EUC-KR браузера; ASCII занимает один байт. Все 11 172 слога от 가 до 힣 занимают по два байта: 2350 из KS X 1001 и 8822 из расширения CP949 (UHC), которое достраивается по раскладке CP949, если декодер знает только KS X 1001.
  • Видимые символы — графемные кластеры из Intl.Segmenter браузера (Unicode Standard Annex #29). В таблице одна строка на кодовую точку, символы из нескольких кодовых точек отмечены, показываются первые 200.
  • Расшифровка: значения U+ — от 4 до 8 шестнадцатеричных цифр, пробелы и запятые между ними считаются разделителями. Значения выше U+10FFFF и одиночные суррогаты выводятся как ошибка с позицией символа. При вводе байтов игнорируются пробелы, запятые, двоеточия, дефисы и префиксы 0x, \x и %, а некорректный UTF-8 выводится с позицией байта.
  • Ввод ограничен 20 000 символов.

Примеры

Текст Кодовая точка JavaScript Байты UTF-8 UTF-8 / UTF-16 / EUC-KR
A U+0041 A (или A без «Оставлять ASCII») 41 1 / 2 / 1 байт
Ж U+0416 Ж D0 96 2 / 2 / 2 байта
é U+00E9 é C3 A9 2 / 2 / не кодируется
中 U+4E2D 中 E4 B8 AD 3 / 2 / 2 байта
한 U+D55C 한 ED 95 9C 3 / 2 / 2 байта
😀 U+1F600 😀 F0 9F 98 80 4 / 4 / не кодируется

В примере по умолчанию «Привет 😀 한» 10 видимых символов, 10 кодовых точек и длина в UTF-16 — 11. Он занимает 21 байт в UTF-8, 22 в UTF-16 и 16 в EUC-KR, где эмодзи записать нельзя.

В обратную сторону автоопределение превращает Привет &#x1F600; U+D55C в «Привет 😀 한», а байты UTF-8 D0 9F D1 80 D0 B8 расшифровываются как «При».

Частые вопросы

Чем кодовая точка отличается от кодировки?

Кодовая точка — это номер, который Юникод присваивает символу, например U+0416 для Ж. Кодировка — это способ записать этот номер байтами. Та же Ж в UTF-8 — это D0 96, а в UTF-16 — 04 16; корейский слог 한 (U+D55C) в UTF-8 — ED 95 9C, а в старой корейской кодировке EUC-KR — C7 D1.

Почему эмодзи превращается в две последовательности \uXXXX?

Строки JavaScript и JSON состоят из кодовых единиц UTF-16. Символам выше U+FFFF нужны две единицы — суррогатная пара, поэтому 😀 (U+1F600) записывается как 😀. Форма ES6 \u{1F600} называет кодовую точку напрямую, поэтому хватает одной последовательности.

Почему один эмодзи считается как несколько кодовых точек?

Многие эмодзи — это последовательности. Эмодзи «семья» — три эмодзи людей, соединённые двумя соединителями нулевой ширины (U+200D), поэтому это один видимый символ, но пять кодовых точек, восемь единиц UTF-16 и 18 байт UTF-8. Так же устроены оттенки кожи, флаги и разложенный корейский текст, поэтому в сводке показаны все три счётчика.

Что значит «нельзя записать в EUC-KR»?

EUC-KR (CP949) — старая корейская кодировка, в которой есть хангыль, ханча и набор символов (в том числе кириллица), но нет эмодзи и букв вроде é. Такие символы не входят в итог байтов EUC-KR и считаются отдельно. Если в браузере нет декодера EUC-KR, этот показатель скрыт.

Мой текст куда-то отправляется?

Нет. Все преобразования выполняются в браузере, ничего из введённого не сохраняется и не загружается.

Не нашли нужный инструмент?