Скрытые символы в тексте: где они прячутся и как их удалить
Скрытые символы — это невидимые кодовые точки Unicode, например пробелы нулевой ширины, неразрывные пробелы и метки направления текста. Они выглядят как обычный пробел или вовсе не видны, поэтому текст кажется нормальным, а поиск, код и проверка форм воспринимают его как другой текст. Найти их можно, посмотрев кодовые точки, а удалить — стерев или заменив именно эти символы.
Удаление невидимых символовНевидимый мусор в моём текстеСделать бесплатноОткуда они берутся
Большинство скрытых символов попадает в текст при копировании, а не при наборе:
- Веб-страницы. Сайты используют неразрывные пробелы (U+00A0), чтобы два слова не разрывались на разных строках, и пробелы нулевой ширины (U+200B), чтобы отметить место, где длинное слово можно переносить. Скопированный фрагмент приносит их с собой.
- Текстовые редакторы. Мягкие переносы (U+00AD) вставляются для переноса слов по слогам. Они невидимы, пока строка не разрывается в этом месте. Некоторые редакторы также автоматически вставляют неразрывные пробелы в определённых местах.
- Мессенджеры и электронная почта. Сообщения, скопированные из чата или почтового клиента, могут содержать соединители нулевой ширины и метки направления, особенно если текст смешивает языки.
- Текст с разным направлением письма. Арабский, иврит и смешанный текст используют метки направления, например метку слева направо (U+200E), метку справа налево (U+200F), а также символы вложения и переопределения (от U+202A до U+202E). Они управляют тем, как выводится строка, а не тем, что в ней написано.
- Метки порядка байтов. Метка порядка байтов (BOM, U+FEFF) в начале файла — это сигнатура, которую записывают некоторые редакторы. Она невидима, но становится настоящим первым символом, когда файл читается как обычный текст.
- Окна чатов с ИИ. Текст, скопированный из некоторых интерфейсов чатов с ИИ, тоже может содержать такие символы. Скорее всего, причина в том, как текст отображался и копировался, поэтому не стоит считать их признаком намерения.
Почему они мешают
Каждый скрытый символ — это настоящая кодовая точка, поэтому он меняет текст, даже когда страница выглядит точно так же:
- Поиск не находит слово. Пробел нулевой ширины внутри слова ломает совпадение, и поиск по слову ничего не выдаёт.
- Код ломается. Неразрывный пробел в исходном файле во многих языках даёт синтаксическую ошибку, и ошибка часто указывает на строку, которая выглядит безупречно. О другой распространённой проблеме при вставке кода читайте в статье о фигурных кавычках.
- Форма отклоняет ввод. Адрес электронной почты с пробелом нулевой ширины после @ выглядит правильно, но не проходит проверку.
- Счётчики расходятся. Количество символов может учитывать эти знаки или не учитывать — в зависимости от инструмента, поэтому один и тот же текст получает два разных итога. Посчитайте текст до и после очистки в счётчике слов, чтобы увидеть разницу.
Вот небольшой пример. Слово «счёт» состоит из пяти букв. Если внутри него стоит пробел нулевой ширины, то это уже шесть кодовых точек, и выглядит слово на экране точно так же. Поиск по слову «счёт» не найдёт второй вариант.
Как их увидеть
Просто глядя на текст, их не найти, поэтому воспользуйтесь одним из способов:
- Вставьте текст в инструмент, который показывает кодовые точки, например удаление невидимых символов: он сообщит, что нашёл, ещё до внесения изменений.
- В редакторе кода включите настройку, которая показывает пробельные и специальные символы. Тогда неразрывные пробелы будут отличаться от обычных.
- В языке программирования выведите кодовые точки подозрительной строки. В Python, например,
[hex(ord(c)) for c in text]перечисляет каждую из них: неразрывный пробел отобразится как 0xa0, а пробел нулевой ширины как 0x200b.
Как их удалить
Удаление должно быть точечным. Если удалить все символы не из ASCII, вместе с ними пропадут ударения, кавычки и буквы других языков. Поэтому лучше так:
- Замените неразрывные пробелы обычными, ведь почти всегда они задумывались как пробелы.
- Удалите пробелы нулевой ширины, мягкие переносы, метки порядка байтов и случайные метки направления.
- Сохраните буквы с диакритикой, typographic-кавычки и настоящие знаки препинания.
Исправить вставленный текст создан для текста, пришедшего откуда-то со стороны, поэтому используйте его, если в скопированном фрагменте ещё и сбиты переносы строк или пробелы.
Как сделать это в fixmint
- Вставьте текст в поле Ваш текст.
- Просмотрите список найденного. Каждый символ назван, например ZWSP для пробела нулевой ширины, и отмечен тем, что с ним будет сделано.
- Оставьте включённым пункт Сохранять соединители внутри эмодзи, чтобы последовательности эмодзи по-прежнему отображались как один значок.
- Отметьте пункт Также заменить фигурные кавычки, короткие и длинные тире и … на обычные символы ASCII только для кода или данных, затем нажмите Копировать или Скачать .txt.
Особые случаи
- Последовательности эмодзи намеренно используют соединители нулевой ширины. Если их удалить, один эмодзи распадётся на несколько значков.
- Неразрывный пробел уместен в некоторых видах типографики, например между числом и единицей измерения, а также в некоторых правилах французской пунктуации. Заменяйте его только там, где точно знаете, что он случайный.
- Когда текст очищен, сравните его с оригиналом, чтобы точно увидеть, что изменилось.
Краткие ответы
Означает ли наличие скрытых символов, что текст написал ИИ?
Нет. Они появляются из веб-страниц, текстовых редакторов, мессенджеров и при копировании вообще. Их наличие не показывает, кто или что написал текст.
Решит ли проблему удаление всех символов не из ASCII?
Нет. Вместе с ними пропадут ударения, кавычки и буквы других языков. Удаляйте только конкретные невидимые кодовые точки.
Как понять, есть ли в строке скрытые символы?
Сравните её длину с количеством символов, которые вы видите, или вставьте строку в инструмент, который показывает кодовые точки. Если числа не совпадают, внутри есть что-то невидимое.
Переведено с помощью ИИ с Английский оригинал.
Комментарии
Комментариев пока нет. Будьте первым.


