Инспектор символов Unicode
Смотрите кодовые точки, байты UTF-8/UTF-16 и экранирование каждого символа
Об этом инструменте
Вставьте любой текст и посмотрите разбор каждого символа: его кодовая точка (U+XXXX), байты UTF-8, единицы UTF-16, escape-последовательность JavaScript, HTML-сущность и общая категория — плюс итоги по кодовым точкам, единицам UTF-16, байтам UTF-8 и символам в восприятии пользователя (графемным кластерам).
Это инструмент для моментов «почему эта строка какая-то странная?»: невидимые символы (пробелы нулевой ширины, BOM, метки направления) появляются как видимые строки таблицы; символы-двойники (кириллическая а против латинской a) обнажают разные кодовые точки; а эмодзи, который «один символ», оказывается семью кодовыми точками, соединёнными zero-width joiner.
Четыре разных итога длины отвечают на вечный вопрос: почему .length в JavaScript, лимит байтов в базе данных и то, что видит пользователь, расходятся в том, какова длина строки.
Частые вопросы
- Почему "🎉".length === 2 в JavaScript?
- Строки JavaScript считают кодовые единицы UTF-16. Символам за пределами U+FFFF — включая большинство эмодзи — нужна суррогатная пара, две единицы. Инспектор показывает и обе единицы, и настоящую кодовую точку, а сводка считает их раздельно.
- Что такое графемный кластер?
- То, что читатель воспринимает как один символ. é может состоять из двух кодовых точек (e + комбинируемый акцент), а семейные эмодзи — из семи и более, соединённых zero-width joiner. Подсчёт графем использует браузерный Intl.Segmenter — самое близкое к «символам, как их видят пользователи».
- Как найти невидимые символы в строке?
- Вставьте её сюда — каждая кодовая точка получает свою строку в таблице, включая пробелы нулевой ширины (U+200B), неразрывные пробелы (U+00A0), BOM (U+FEFF) и метки направления, каждая с пометкой категории. Это классические виновники «одинаковых» строк, проваливающих проверку на равенство.
- Что мне говорят последовательности байтов UTF-8?
- Ровно то, что будет храниться или передаваться: ASCII — один байт, большинство латинских расширений — два, CJK — три, эмодзи — четыре. Если система обрезает посреди последовательности, вы получаете символы замены (�) — представление в байтах показывает, куда пришлись бы такие разрезы.