Конвертер Unicode
Вставьте любую запись Unicode и прочитайте её как текст: \uXXXX, скобки ES6, кодовые точки U+ и байты UTF-8 распознаются автоматически, а все остальные представления выводятся сразу. Всё выполняется локально в браузере.
Всё выполняется в вашем браузере — введённые данные никуда не отправляются, не пишутся в логи и не сохраняются.
Здесь появится результат Все представления сразу
| JavaScript / Java / JSON uXXXX | — | |
|---|---|---|
| ES6 u{XXXXX} | — | |
| Python uXXXX / UXXXXXXXX | — | |
| Go uXXXX / UXXXXXXXX | — | |
| Rust u{XXXXX} | — | |
| Кодовая точка U+XXXX | — | |
| HTML, десятичная &#NNNNN; | — | |
| HTML, шестнадцатеричная &#xXXXX; | — | |
| URL-кодирование %XX | — | |
| CSS XXXXXX | — | |
| Байты UTF-8 hex | — | |
| Кодовые единицы UTF-16 hex | — | |
| UTF-32 hex | — | |
| Восьмеричные байты NNN | — | |
| Десятичные кодовые точки NNNNN | — |
Символ за символом
| Символ | Кодовая точка | UTF-8 | UTF-16 | Письменность | Категория | Название |
|---|---|---|---|---|---|---|
| Здесь появится результат | ||||||
Краткая справка
| Символ | Кодовая точка | JavaScript / Java / JSON | Байты UTF-8 | URL-кодирование | HTML, десятичная |
|---|---|---|---|---|---|
| 中文 | U+4E2D U+6587 | \u4E2D\u6587 | E4 B8 AD E6 96 87 | %E4%B8%AD%E6%96%87 | 中文 |
| 😀 | U+1F600 | \uD83D\uDE00 | F0 9F 98 80 | %F0%9F%98%80 | 😀 |
| A | U+0041 | A | 41 | A | A |
| ␣ U+3000 | U+3000 | \u3000 | E3 80 80 | %E3%80%80 |   |
Поведение проверено на Node, Python, Java, Go и настоящем браузерном движке, а не выведено из документации.
Что такое escape-последовательность Unicode?
Escape-последовательность Unicode записывает символ одними только ASCII-знаками, чтобы он пережил системы, которые не умеют переносить сам символ. У одного и того же символа почти в каждом языке своя запись: JavaScript и JSON пишут по четыре шестнадцатеричные цифры на кодовую единицу UTF-16, ES6 и Rust берут кодовую точку целиком в фигурные скобки, у Python и Go есть ещё широкая восьмизначная форма, CSS обходится одной обратной косой чертой, а у HTML свои числовые и именованные ссылки. Все они описывают одну и ту же кодовую точку — поэтому одна строка приходит к вам то в одном, то в другом обличье.
中文
U+4E2D U+6587 code point
\u4E2D\u6587 JavaScript / Java / JSON
\u{4E2D}\u{6587} ES6 / Rust
E4 B8 AD E6 96 87 UTF-8
%E4%B8%AD%E6%96%87 URL
中文 HTML Что умеет этот конвертер
Сам определяет запись
Escape-последовательности, фигурные скобки, широкая форма, кодовые точки, сущности, процентное кодирование и цепочки байтов распознаются без переключения режима.
Переживает смешанный ввод
Меняются только закодированные части. Пунктуация JSON, пути Windows и уже экранированные обратные косые черты остаются как есть.
Все представления сразу
Одна вставка даёт всю таблицу, так что конвертировать дважды ради перехода с одного языка на другой не придётся.
Правильно для каждого языка
Символы за пределами BMP записываются широкой формой для Python и Go, где суррогатная пара не сработает.
Разбор на уровне символа
Кодовая точка, байты UTF-8 и UTF-16, письменность и категория для каждого символа, а также название Unicode для тех символов, у которых оно есть.
Показывает невидимые символы
Метки порядка байтов, соединители нулевой ширины и неразрывные пробелы получают видимую замену.
Примеры
Разобрать строку лога, не трогая всё остальное
{"msg":"\u4e2d\u6587 failed","code":500} {"msg":"中文 failed","code":500} Меняются только escape-последовательности. Кавычки, ключи и числа остаются ровно такими, какими были, поэтому можно вставить целую строку лога, а не выковыривать escape-последовательности по одной.
Несколько разных записей в одной вставке
U+4E2D \u{1F600} 中 \ud83d\ude00 中 😀 中 😀
Кодовая точка, фигурная запись ES6, HTML-сущность и суррогатная пара декодируются за один проход. Ничего не пришлось предварительно выделять или настраивать.
Один символ во всех представлениях
中
\u4E2D JavaScript / Java / JSON
\u{4E2D} ES6 / Rust
U+4E2D code point
E4 B8 AD UTF-8
\344\270\255 octal Один и тот же символ, записанный так, как его ждёт каждый язык. Учтите, что Python и Go для символов за пределами BMP требуют широкую восьмизначную форму: суррогатная пара не скомпилируется в Go и вызовет UnicodeEncodeError в Python.
Как использовать
- 1
Вставьте
Escape-последовательности, кодовые точки, сущности, закодированные байты или обычный текст. Уточнять, что именно это, не нужно.
- 2
Прочитайте результат
Читаемый текст появляется сразу, рядом отмечено, какие представления были распознаны.
- 3
Скопируйте нужную форму
Под результатом перечислены все представления, у каждого своя кнопка копирования.
- 4
Разберите, если что-то не так
Откройте посимвольную таблицу с кодовыми точками, байтами, письменностью и названиями, а «Показать невидимые символы» вытащит наружу спрятанное.
Ошибки, о которых стоит знать
Суррогатная пара там, где язык ждёт широкую форму
Пара, которая работает в JSON, превращается в две сломанные половины в Python и отказывается компилироваться в Go. Для символов выше U+FFFF используйте широкую форму.
\ud83d\ude00
\U0001F600
Числовые ссылки HTML прочитаны как обычные кодовые точки
Ссылки между 128 и 159 нужно читать через windows-1252. Наивная реализация превращает правую одинарную кавычку в невидимый управляющий символ — именно поэтому в старой выгрузке на этих местах не отображается ровным счётом ничего.
’ -> U+0092
’ -> U+2019
Короткая запись CSS перед шестнадцатеричным символом
Парсер продолжает есть шестнадцатеричные цифры, поэтому запись и следующий символ сливаются в одну неверную кодовую точку. Дополняйте до шести цифр.
\4E2Da
\004E2Da
Когда это нужно
- Чтение логов
- В логах сервера и ответах API не-ASCII часто приходит экранированным. Вставьте строку и прочитайте её, ничего заранее не правя.
- Перенос строк между языками
- Скопируйте запись ровно в той форме, которую принимает целевой язык, вместо ручного перевода между суррогатными парами и широкой формой.
- Поиск ошибки кодирования
- Когда сравнение не проходит или база отклоняет значение, посимвольная таблица показывает, какие именно кодовые точки и байты в этом участвуют.
- Чистка вставленного текста
- Текст, скопированный с веб-страницы или из документа, часто тащит за собой невидимые символы. Найдите их до того, как они доедут до продакшена.
Технические детали
- Кодовые единицы UTF-16, а не символы
- JavaScript, Java и JSON экранируют кодовые единицы UTF-16, поэтому символу выше U+FFFF нужны две escape-последовательности. У Python и Go вместо этого есть восьмизначная форма, которая принимает кодовую точку напрямую.
- Числовые ссылки HTML переотображаются
- Спецификация HTML требует читать числовые ссылки в диапазоне от 128 до 159 через windows-1252, а не как кодовые точки, поэтому ссылка с номером 146 — это правая одинарная кавычка, а не невидимый управляющий символ.
- Записи CSS нужно дополнять до шести цифр
- Запись CSS съедает до шести шестнадцатеричных цифр, поэтому короткая запись, за которой идёт шестнадцатеричный символ, сливается с ним в одну неверную кодовую точку. Дополнение до шести цифр снимает неоднозначность, а идущий следом пробел съедается как ограничитель.
- Непарные суррогаты ведут себя везде по-разному
- Непарный суррогат сохраняется при сериализации в JSON, молча заменяется в TextEncoder, отвергается процентным кодированием, записывается знаком вопроса в Java и вызывает ошибку в Python.
Лучшие практики
- Нормализуйте перед сравнением
- Приводите обе стороны к одной форме нормализации перед сравнением или дедупликацией, особенно для имён и идентификаторов.
- Для Python и Go берите широкую форму
- Суррогатная пара допустима в JSON, но ломается в обоих языках. Для исходников Python и Go используйте восьмизначную запись.
- Проверяйте невидимые символы заранее
- Валидируйте вставленный текст на границе системы, а не отлаживайте расхождение потом.
- Держите оригинал под рукой
- Декодирование не всегда обратимо без потерь: как только появились символы замены, вернуться уже некуда. Сохраняйте исходное значение, пока не убедитесь в результате.
Часто задаваемые вопросы
Что означает \u4e2d\u6587 и как это прочитать?
Обратные косые черты потерялись, остался голый u4e2d. Это ещё можно декодировать?
Почему одно эмодзи записано двумя escape-последовательностями?
Как сделать наоборот — превратить текст в escape-последовательности?
Две строки выглядят одинаково, но код считает их разными. Почему?
В строке что-то невидимое ломает код. Как это найти?
Мои данные куда-нибудь загружаются?
Похожие инструменты
Все инструменты →Base64 декодер и кодировщик
Кодирование и форматирование
Декодирование и кодирование Base64 онлайн бесплатно. Преобразование в реальном времени с полной поддержкой UTF-8 и эмодзи. Полная приватность — работает в браузере. Без регистрации.
Конвертер Base64 в изображение
Кодирование и форматирование
Декодируйте строку Base64 или data URI обратно в изображение прямо в браузере. Предпросмотр, размеры и MIME, затем скачивание как PNG, JPG, GIF, SVG. Без загрузки.
Конвертер CSV в JSON
Кодирование и форматирование
Конвертируйте CSV в JSON в браузере. RFC 4180, определение типов, заголовок, безопасность больших целых. 100% приватно, без загрузки.
Конвертер .env в JSON
Кодирование и форматирование
Вставьте файл .env — получите JSON мгновенно. Пароли БД, API-ключи и токены не покидают браузер: 100% приватно, без загрузки, парсер dotenv.
Бесплатный HTML-декодировщик сущностей — unescape HTML
Кодирование и форматирование
Декодируйте HTML-сущности и снимайте экранирование HTML онлайн — бесплатно, без регистрации, 100% в браузере. Преобразует именованные, десятичные и hex-ссылки обратно в символы; данные не загружаются.
Бесплатный HTML-кодировщик сущностей — экранирование HTML
Кодирование и форматирование
Кодируйте HTML-сущности и экранируйте спецсимволы (< > & " ') онлайн — бесплатно, без регистрации, 100% в браузере. Именованный, десятичный или шестнадцатеричный вывод; данные не загружаются.