Конвертер Юникода — кодовые точки и байты 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-8 | UTF-16 | Десятичный | Видимый симв. |
|---|---|---|---|---|---|
| П | U+041F | D0 9F | 041F | 1055 | 1 |
| р | U+0440 | D1 80 | 0440 | 1088 | 2 |
| и | U+0438 | D0 B8 | 0438 | 1080 | 3 |
| в | U+0432 | D0 B2 | 0432 | 1074 | 4 |
| е | U+0435 | D0 B5 | 0435 | 1077 | 5 |
| т | U+0442 | D1 82 | 0442 | 1090 | 6 |
| (невидимый) | U+0020 | 20 | 0020 | 32 | 7 |
| 😀 | U+1F600 | F0 9F 98 80 | D83D DE00 | 128512 | 8 |
| (невидимый) | U+0020 | 20 | 0020 | 32 | 9 |
| 한 | U+D55C | ED 95 9C | D55C | 54620 | 10 |
Что это такое
Введите текст — и сразу получите все распространённые формы записи, каждую с кнопкой копирования: кодовые точки Юникода, экранирование JavaScript и JSON, форму ES6, шестнадцатеричные и десятичные HTML-мнемоники и сырые байты UTF-8 и UTF-16BE. Пригодится, чтобы безопасно вставить кириллицу и другой не-ASCII-текст в исходный код, прочитать последовательности \uXXXX в логе или понять, почему текст превратился в «кракозябры».
Инструмент также сравнивает размер в байтах в UTF-8, UTF-16 и старой корейской кодировке EUC-KR (CP949) и показывает каждую кодовую точку в таблице. Обратное направление превращает escape-последовательности или шестнадцатеричные байты снова в текст. Всё работает в браузере, ничего не сохраняется.
Как пользоваться
- Выберите направление: «Текст → код» или «Код → текст».
- Для «Текст → код» введите текст в поле. Там уже стоит пример «Привет 😀 한», поэтому результаты видны сразу.
- Снимите галочку «Оставлять ASCII как есть», чтобы экранировать все символы, а не только не-ASCII.
- Скопируйте нужный формат. Ниже — сравнение байтов и таблица символов.
- Для «Код → текст» оставьте «Автоопределение» для escape-последовательностей и значений U+, даже вперемешку, или выберите формат шестнадцатеричных байтов для списка байтов.
- Скопируйте расшифрованный текст кнопкой.
Как это работает
- Кодовые точки записываются как 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, где эмодзи записать нельзя.
В обратную сторону автоопределение превращает Привет 😀 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, этот показатель скрыт.
Мой текст куда-то отправляется?
Нет. Все преобразования выполняются в браузере, ничего из введённого не сохраняется и не загружается.