ChatGPT оставляет невидимые маркеры в тексте — как их найти и убрать

Эти символы выдают, что текст написал ИИ.

Что случилось

С обновлением модели ChatGPT до GPT‑5 во многих каналах про нейронки и технологии начали обсуждать так называемые невидимые маркеры, или водяные знаки, в сгенерированных текстах. Речь о непечатаемых символах Unicode, которые отображаются только в редакторах с определёнными настройками, а в самом ChatGPT и после вставки на какой-нибудь сайт не выводятся. 

⚡️Новости из мира гаджетов, обзоры, гайды и не только — в телеграм-канале «Технологии | Лайфхакер».

На самом деле эту проблему заметили давно: ещё в начале года пользователь Reddit жаловался, что стал часто находить в текстах непечатаемый символ U+2019, которым нейронка решила заменить обычный апостроф (‘). 

Тогда никакой реакции обществености не было, но из каждого утюга об этом заговорили уже в апреле — с релизом GPT-o3 и GPT-o4 mini. В блоге платформы для интеграции ИИ Rumi опубликовали статью о том, что в текстах от новых моделей полно неразрывных пробелов Unicode U+A0 (они же <0xa0>) и узких неразрывных пробелов U+202F.

Сверху — как текст выглядит в обычном редакторе, снизу — в редакторе с поддержкой непечатаемых символов. Скриншот: Rumi

Эти символы могли появляться в любом месте текста вне зависимости от того, есть ли рядом цифры или аббревиатуры. И в теории по ним можно было определить, что текст сгенерирован ИИ. Это вызвало беспокойство: вдруг OpenAI решила стрелять себе в ногу и маркировать нейросетевые тексты?

Оказалось, нет: уже спустя три дня OpenAI исправила проблему и все успокоились. 

Вот только с релизом GPT‑5 в августе, похоже, узкие неразрывные пробелы вернулись — и паранойя заиграла новыми красками. Но даже если сообщения об этом правдивы, подтвердить это нельзя, потому что OpenAI, видимо, опять всё починила. 2 сентября мы не смогли заставить бота выдать неразрывные пробелы ни на русском, ни на английском. Зато получилось найти кое-что другое: оказалось, что некоторые символы вроде $ и ~ чат-бот пишет как \$ и \~. Только в интерфейсе и обычных редакторах \ не отображается и всё выглядит нормально. 

Скриншот: Лайфхакер

Нечитаемый обратный слеш с Unicode уже не связан — дело в экранировании символов. Поскольку ~ и $ имеют специальное значение в языках программирования и разметке, \ перед ними ставится, чтобы дать машине понять: печатай символ как есть, ничего другого не выполняй. А вот это уже звоночек для каждого, кто посмотрит на текст внимательно. Ежу понятно: если текст писал человек, то экранировать он ничего не будет.

В общем, даже если какие-то дыры OpenAI латает, найти косяки машинного текста можно, даже не имея особых знаний и хитрых инструментов. Скорее всего, внимательным взглядом поймать ИИ на особенностях форматирования получится в любой версии модели, но это не означает, что нужно перепечатывать каждую букву вручную, боясь скрытых символов.

Как искать непечатаемые символы в текстах ChatGPT

Для этого есть удобный онлайн-инструмент от SoSci Survey. Работает он максимально просто: вставьте текст в большое поле сверху и нажмите Show me the characters. Непечатаемые Unicode-символы подсветятся фиолетовым, в том числе — неразрывные пробелы, о которых все беспокоились.

Скриншот: Лайфхакер

Если текст писал человек, который не использовал Unicode-символы намеренно, фиолетовой подсветки быть не должно.

Также непечатаемые символы отображаются в редакторах кода вроде VS Code и Sublime Text. Но учтите, что в обоих случаях не подсвечивается символ экранирования, поэтому \~ останется незамеченным. Придётся искать по странице: нажмите Ctrl + F или Cmd + F, далее введите нужную комбинацию в окошке поиска.

Как избавиться от непечатаемых символов

Если вы заметили всего пару лишних символов, их проще удалить прямо в редакторе или заменить на нужный знак с клавиатуры. А вот большие тексты с кучей непечатаемых символов вручную вычищать неудобно. Глаз замыливается, и риск что-то пропустить или удалить нужное увеличивается. В таком случае есть несколько вариантов:

  • Скопируйте текст из ChatGPT и вставьте в новый Google-документ. Затем скопируйте из документа и снова проверьте на непечатаемые знаки. Если что-то осталось, вставьте скопированный текст в тот же документ или другой редактор через Ctrl + Shift + V (Windows) или Cmd + Shift + V (Mac). Это уберёт форматирование вместе с непечатаемыми символами.
  • Используйте бесплатный веб-сервиc Humanize AI. Вставьте текст в поле слева, и очищенный вариант отобразится справа и сразу скопируется в буфер обмена. В настройках можно отключить Transform dashes и Transform quotes, чтобы сохранить длинные тире и кавычки-ёлочки соответственно.
  • Воспользуйтесь инструментом замены в текстовом редакторе: через поиск найдите, какие символы появились в тексте, и по одному настройте правила для их замены. Например, выберите ~ вместо \~. Это вариант для тех, кто хочет максимально сохранить форматирование или боится что-то упустить с другими методами. 
  • В редакторе кода выделите нужную комбинацию символов и нажмите Alt + F3. Это подсветит все точные совпадения в пределах файла. Нажмите Del, чтобы удалить сразу все. Повторите это действие с другими символами, если нужно.

Это самые простые методы, не требующие особых знаний. Но если вы хоть немного разбираетесь в программировании, то можете воспользоваться скриптами для удаления всех символов, кроме печатных. Такой скрипт вам спокойно предложит тот же ChatGPT, а варианты для нетипичных сценариев (например, требующих убрать только часть непечатаемых символов) можно поискать на Stack Overflow. Хотя это уже ближе к стрельбе из пушки по воробьям.

Обложка: limpreom / shutterstock / Лайфхакер
Если нашли ошибку, выделите текст и нажмите Ctrl + Enter

Это упрощённая версия страницы.

Читать полную версию
Ярослав Паламарчук
04.09.25 16:39
Боже, сколько можно положить безграмотность, вы же вроде бы просветительское издание. Никто нейронки специально "защитные" символы не вставляет, просто нейронки знают ГОСТы и ISO, в отличие от их пользователей. В любом дипломе, курсаче, научной статье или даже статье на Википедии после года, при названиях рейсов самолётов, при обозначениях типа 100 г., 1000 р. обязан ставиться неразрывный пробел. То же самое с длинным, коротким тире и дефисом.
Олег Макаров
04.09.25 18:29
Авторы вообще не знают разницы между словами "непечатный" и "непечатаемый" в русском языке.А на редакторах лайфхакер экономит.
Наталья Мурахтанова
05.09.25 09:57
Спасибо за внимательность, исправили.
Дарья Громова
05.09.25 12:30
Фишка в том, что есть примеры неразрывных пробелов в местах, где их человек бы не поставил, это уже не списать на соответствие правилам. Как и символы экранирования - или они тоже в ГОСТе есть?