Нормализатор Unicode
Одна и та же видимая строка может храниться как разные последовательности байтов в зависимости от того, существует ли акцент как одна кодовая точка или как буква плюс комбинируемый знак. Этот нормализатор преобразует текст между четырьмя формами нормализации Unicode (NFC, NFD, NFKC, NFKD), чтобы ваши строки чисто сравнивались в базах данных, поисковых индексах, скриптах дедупликации и совпадениях регулярных выражений.
Как нормализовать текст Unicode
-
1
Вставьте ввод
Вставьте строку: буквы с акцентами, текст CJK, лигатуры, всё, что кажется несогласованным.
-
2
Выберите форму
Выберите NFC (составленная, привычная веб-форма), NFD (разложенная), NFKC (совместимая составленная) или NFKD (совместимая разложенная).
-
3
Сравните значения
Инструмент сообщает число символов (кодовых точек) и длину в байтах до и после, чтобы вы видели, укоротила форма строку или удлинила.
-
4
Скопируйте нормализованный результат
Используйте результат в базе данных, в полезной нагрузке API, в генераторе слагов или в тестовой фикстуре.
Четыре формы и когда применять каждую
Нормализация Unicode определена стандартным приложением UAX #15. Четыре формы различаются по двум осям: каноническая против совместимости и составленная против разложенной.
Сравнение бок о бок
| Форма | Композиция | Сопоставление | Когда использовать |
|---|---|---|---|
| NFC | Составленная | Только каноническое | По умолчанию для веб-контента, баз данных, имён файлов |
| NFD | Разложенная | Только каноническое | Обработка текста, убирающая акценты посимвольно |
| NFKC | Составленная | Включая совместимость | Поиск, идентификаторы, спам-фильтры, свёртка для отображения |
| NFKD | Разложенная | Включая совместимость | Агрессивная нормализация перед удалением диакритики |
Канонические формы сохраняют смысл
Введите é и переключайте формы. NFC сообщает 1 символ и 2 байта (одна кодовая точка U+00E9), а NFD сообщает 2 символа и 3 байта (простая e, за которой идёт комбинируемый акут, U+0301). Оба выглядят на экране одинаково, но это разные последовательности байтов, и именно это расхождение устраняет нормализация. Канонические формы лишь переставляют байты, поэтому é в любой из форм всегда означает букву e с акутом.
Что на самом деле меняет «совместимость»
Формы K (NFKC, NFKD) переписывают ещё и символы, которые выглядят родственно, но несут иное оформление. Это операция с потерями: вернуть оригинал не получится. Например:
fi(U+FB01, латинская малая лигатура fi) становитсяfi(две буквы)①(U+2460, цифра один в кружке) становится1㌀(U+3300, квадратный CJK-символ «апаато») становитсяアパート- Полноширинная
A(U+FF21) становитсяA
Это мощно для поиска и дедупликации, но разрушительно для типографики, поэтому прибегайте к формам K только тогда, когда визуальная точность не важна.
Практическое правило
- Храните пользовательский контент в NFC.
- Сравнивайте идентификаторы в NFC, чтобы
café, записанная одной кодовой точкой, иcafé, записанная какe+ U+0301, совпадали; переходите к NFKC, когда нужно, чтобы совпадали такжеfiиfiили полношириннаяAиA, как это делают правила идентификаторов в UAX #31. - Создавайте слаги без акцентов, нормализуя к NFD и удаляя блок комбинируемых знаков от U+0300 до U+036F.
Часто задаваемые вопросы
Обычно это значит, что ваш ввод уже был в целевой форме. Вставьте текст, смешивающий источники (имя файла с Mac, скопированный фрагмент PDF, строку из старой базы данных), и вы гораздо вероятнее увидите изменение числа символов и байтов.
Для отображаемых URL берите NFC. Для слагов, где нужен чистый ASCII, нормализуйте к NFD, удалите комбинируемые знаки регулярным выражением по диапазону от U+0300 до U+036F, а затем переведите в нижний регистр. NFKD подойдёт, когда вы хотите также свернуть лигатуры и цифры в кружках.
Канонические формы (NFC, NFD) никогда не меняют смысл, они лишь переставляют байты. Формы совместимости (NFKC, NFKD), напротив, меняют его: лигатуры распадаются, полноширинные буквы сворачиваются, верхние индексы выравниваются. Используйте их только тогда, когда именно этого и хотите.
Нормализация выполняется на нашем сервере через класс Normalizer в PHP, и результат возвращается в том же запросе; ваш текст не сохраняется. Мы записываем только анонимное событие с указанием применённой формы, но никогда само содержимое.
Сопутствующие инструменты
Генератор названий городов
Создавайте вымышленные названия городов, посёлков, деревень и столиц для миростроения, карт, игр, историй и тестовых данных с короткими заметками к каждому результату.
Переводчик иконок
Введите английский текст, и каждое слово из встроенного списка получит подходящий эмодзи. Скопируйте результат как текст с эмодзи.
Генератор бегущей строки
Создавайте анимированные бегущие заголовки с настраиваемой скоростью, размером шрифта и цветами. Предпросматривайте CSS-строку marquee или панель объявлений вживую в браузере.
Переводчик Эндермана
Превратите любую фразу в речь Эндермена в стиле Minecraft: растяните гласные и переверните каждое второе слово. Скопируйте результат в чат, на таблички или в посты фанатов.
Генератор шрифтов для Instagram
Генерируйте Unicode-«шрифты» (жирный, курсив, рукописный, моноширинный, фрактура), которые вставляются прямо в ваше био, имя, подписи и комментарии в Instagram.
Символы стрелок для копирования
Копируйте популярные Unicode-стрелки одним щелчком: прямые, двойные, диагональные, крючковые, круговые и треугольные для документов, чатов и дизайна.
Инструмент доступен на других языках
- Penormal Unicode [ID]
- Normalizator Unicode [PL]
- Unicode-normaliserare [SV]
- ตัวปรับข้อความให้เป็นมาตรฐาน Unicode [TH]
- Unicode-Normalisierer [DE]
- Unicode正規化ツール [JA]
- 유니코드 정규화기 [KO]
- Normalizador Unicode [ES]
- Normalizador Unicode [PT]
- Bộ chuẩn hóa Unicode [VI]
- Normaliseur Unicode [FR]
- مُطبِّع Unicode [AR]
- Unicode-normaliseerder [NL]
- Unicode Normalizer [EN]
- Normalizzatore Unicode [IT]
- Unicode Normalleştirici [TR]
- Unicode 规范化工具 [ZH]