Текстовые водяные знаки ИИ: скрытые символы против меток выбора токенов
Текстовые водяные знаки ИИ бывают двух видов, и только один из них состоит из символов, которые можно удалить.
| Тип водяного знака | Где находится | Виден этому инструменту | Удаляется этим инструментом |
|---|---|---|---|
| Метки скрытых символов | В байтах текста, как невидимые или необычные кодовые точки | Да | Да |
| Метки выбора токенов | В самих выбранных словах | Нет | Нет |
Метки скрытых символов — это кодовые точки, которые хранит текстовый редактор, а экран никогда не рисует.
Метки выбора токенов переносятся тем, какое слово модель выбрала на каждом шаге, поэтому не остаётся символа, который можно найти или удалить. Каждый инструмент ИИ, который сегодня помечает текстовый вывод, использует именно этот вид.
Что делает символ Юникода невидимым?
Символ невидим, когда не занимает ширины на экране. Юникод фиксирует это свойством Default_Ignorable_Code_Point и общей категорией Cf, то есть format.
Default_Ignorable_Code_Point — производное свойство, публикуемое как обычный текстовый список в DerivedCoreProperties.txt для каждой версии стандарта. Этот очиститель закреплён за Юникодом 17.0 от 9 сентября 2025 года, который добавил 4 803 новых символа и довёл общее число закодированных до 159 801.
Я взял данные свойств Юникода 17.0 и посчитал сам. Свойство Default_Ignorable_Code_Point несут 4 174 кодовые точки, но только 405 из них — назначенные символы. Остальные 3 769 — зарезервированные слоты, которые пока никто не использует. Из 405 штук 256 — селекторы вариаций, а 97 находятся в блоке Tags, так что в обычном письме встречаются 52.
Категория Cf в той же версии содержит 170 символов. Поэтому круглое маркетинговое число вроде «104 скрытых символа» само по себе ничего не говорит. Без версии Юникода рядом это число нельзя сверить ни с чем.
Почему водяные знаки выбора токенов переживают очистку символов?
Выбор токенов, также известный как статистический водяной знак, хранится в том, какие слова выбрала модель, поэтому удаление невидимых символов не очищает статистические метки.
Ни один очиститель текстовых водяных знаков в интернете не может удалить водяной знак выбора токенов или статистический, потому что алгоритм инструментов ИИ является проприетарным.
Ставит ли ChatGPT водяной знак в свой текст?
OpenAI говорит нет. 20 апреля 2025 года Rumidocs сообщил, что ответы GPT o3 и o4 mini содержали U+202F, NARROW NO-BREAK SPACE. OpenAI ответил через два дня. Символы были «особенностью крупномасштабного обучения с подкреплением» и не являлись водяным знаком. Rumidocs обновил материал 23 апреля 2025 года, сообщив, что особые символы перестали появляться.
OpenAI разработал метод текстового водяного знака в 2024 году и так и не выпустил его. В текущей справочной статье о происхождении перечислено, что несёт сигнал сегодня: изображения получают C2PA Content Credentials и SynthID, аудио — SynthID, а текст — ничего из этого. На той же странице сказано, что «наша цель — расширить сигналы происхождения на все модальности, включая текст», и это план, а не продукт.
Честный ответ короткий. ChatGPT не ставит водяной знак на свой текст, а символы, которые люди находили в 2025 году, были ошибкой, которую исправили.
Типы невидимых символов в выводе ChatGPT и Claude
Символы, которые находит этот очиститель, делятся на пять групп: символы нулевой ширины, необычные пробелы, управляющие символы, похожая пунктуация, а также символы тегов или частного использования.
| Группа | Примеры | Что делает | Пресет «Стандартный» |
|---|---|---|---|
| Символы нулевой ширины | U+200B, U+200C, U+200D, U+2060, U+FEFF | Не занимает ширины, но всё равно хранится в файле | Удаляет U+200B, U+2060, U+FEFF и сохраняет два соединителя |
| Необычные пробелы | U+00A0, U+2009, U+202F, U+3000 | Выглядит как пробел, но сортируется и ищется как другой символ | Преобразует в обычный пробел |
| Управляющие символы | Диапазоны C0 и C1, двунаправленные управляющие | Управляет отрисовкой или ломает парсеры, никогда не печатается | Удаляет всё, кроме табуляции и новой строки |
| Похожая пунктуация | Фигурные кавычки, средние и длинные тире, U+00AD | Печатается, но не как символ, который вы набрали | Не трогает |
| Теги и частное использование | U+E0000–U+E007F, область частного использования | Несёт читаемый текст, который человек не видит | Удаляет |
Вот рабочий пример, который я использовал для всех измерений на этой странице. Предложение «The meeting starts at 9:30 am on 12 May.» — 40 символов и 40 байт при наборе в простом текстовом редакторе. После одного прохода через текстовый процессор и обратно получилось 42 символа и 49 байт. Внутри оказались метка порядка байтов в начале, пробел нулевой ширины после «am» и два обычных пробела, тихо заменённых на U+202F и U+00A0. Девять лишних байт. Визуально ничего не изменилось.
The meeting starts at 9:30 am on 12 May.Символы нулевой ширины: U+200B, U+200C, U+200D, U+2060 и U+FEFF
Символы нулевой ширины не занимают места на экране, но всё равно существуют в файле, поэтому вставленный текст может нести метки, которых никто не видит.
| Кодовая точка | Официальное имя Юникода | Реальная роль |
|---|---|---|
| U+200B | ZERO WIDTH SPACE | Отмечает возможность переноса строки, чаще всего вставляется веб-редакторами |
| U+200C | ZERO WIDTH NON-JOINER | Не даёт буквам сливаться в персидских и арабских словах |
| U+200D | ZERO WIDTH JOINER | Соединяет эмодзи в одну картинку и образует лигатуры в индийских письменностях |
| U+2060 | WORD JOINER | Запрещает перенос строки в этом месте |
| U+FEFF | ZERO WIDTH NO-BREAK SPACE | Метка порядка байтов, обычно оставлена текстовым редактором, а не ИИ |
Два из этих пяти — рабочие символы, а не мусор. U+200C и U+200D несут смысл в настоящих языках, поэтому пресет «Стандартный» оставляет их на месте.
Необычные пробелы: U+00A0, U+2009, U+202F и U+3000
Необычные пробелы выглядят как обычный пробел, но имеют другую кодовую точку, что ломает поиск, сортировку и код.
Юникод 17.0 определяет 17 символов в категории Zs, разделитель пробела, и только один из них — пробел на вашей клавиатуре. Я выписал все 17 из базы символов с шириной в байтах UTF-8, потому что именно ширина в байтах делает их «дорогими».
| Кодовая точка | Официальное имя Юникода | Байты UTF-8 |
|---|---|---|
| U+0020 | SPACE | 1 |
| U+00A0 | NO-BREAK SPACE | 2 |
| U+1680 | OGHAM SPACE MARK | 3 |
| U+2000 to U+200A | EN QUAD–HAIR SPACE, 11 символов | по 3 |
| U+202F | NARROW NO-BREAK SPACE | 3 |
| U+205F | MEDIUM MATHEMATICAL SPACE | 3 |
| U+3000 | IDEOGRAPHIC SPACE | 3 |
Один U+202F стоит три байта там, где пробел стоит один, и поиск «9:30 am» не найдёт «9:30 am», если промежуток — U+202F. Именно из‑за этого несовпадения пробелы нормализуются даже в пресете «Стандартный».
9:30 am
9:30 amВы можете скопировать пример текста в поле ввода инструмента выше, чтобы увидеть результат.
Тире, «умные» кавычки и мягкие переносы, которые вставляют редакторы
Фигурные кавычки, длинные тире и мягкий перенос U+00AD обычно приходят из автозамены текстового процессора, а не из языковой модели.
Юникод 17.0 присваивает свойство Dash 31 символу — от обычного U+002D на клавиатуре до U+2014 EM DASH и U+2E3A TWO-EM DASH. Только один из них — нажатие клавиши. Остальные появляются, когда ПО решает, что вы имели в виду. U+00AD — исключение: он печатается как дефис только при переносе строки в этом месте и остаётся невидимым везде ещё.
Именно тире чаще всего приводят людей на такую страницу, и короткий ответ — они ничего не доказывают. Полный разбор ниже, в разделе о длинном тире.
Символы тегов и частного использования, скрывающие инструкции внутри текста
Символы в блоке Unicode Tags, U+E0000–U+E007F, могут нести целое предложение, которое ни один человек никогда не увидит. Так злоумышленники протаскивают скрытые инструкции в текст, который потом прочитает ИИ-ассистент.
Блог AWS Security 30 сентября 2025 года описал контрабанду символов Юникода. В нём говорится о символах тегов, которые «изначально задумывались как невидимые маркеры языка в тексте» и «стали потенциальным вектором для prompt injection». Исследовательская заметка Cloud Security Alliance от 10 марта 2026 года проследила тот же приём в навыках ИИ-агентов, описаниях инструментов и MCP-серверах. В работе рядом с блоком Tags названы U+200B, U+200C, U+200D и U+FEFF.
Я собрал пример, чтобы увидеть масштаб. Видимое предложение «Great work on the report.» — 25 символов и 25 байт. Я добавил инструкцию из 42 символов, закодированную символами тегов. Файл вырос до 67 символов и 193 байт. На экране по-прежнему пять слов и точка, а скрипт извлёк инструкцию из копии целиком. Каждый символ тега стоит четыре байта и ноль пикселей.
Great work on the report.Это сильнейший довод очищать текст, никак не связанный с детекцией ИИ. Вставьте блок текста со веб-страницы в чат-ассистента — и можете передать ему инструкции, которые никогда не набирали.
Удаление невидимых символов в браузере: рабочий процесс сканирования и очистки
Этот очиститель сканирует текст в момент вставки, перечисляет каждую находку с официальным именем Юникода и позицией и ничего не меняет, пока вы не нажмёте «Очистить текст».
Последовательность состоит из четырёх шагов:
- Вставьте текст или перетащите файл .txt или .md.
- Просмотрите список находок: он называет каждый символ и где он находится.
- Выберите пресет или оставьте отдельные находки, которые хотите защитить.
- Очистите, затем скопируйте результат или скачайте его.
Этот очиститель не переписывает, не перефразирует и не «очеловечивает» ни единого слова вашего текста.
Сравнение пресетов «Стандартный», «Расширенный» и «Строгий»
«Стандартный» удаляет символы, создающие проблемы в обычном письме, «Расширенный» расширяет охват, а «Строгий» удаляет больше всего.
| Группа символов | Стандартный | Расширенный | Строгий |
|---|---|---|---|
| Пробел нулевой ширины, соединитель слов, метка порядка байтов | Удаляется | Удаляется | Удаляется |
| Двунаправленные управляющие и управляющие C0/C1 | Удаляется | Удаляется | Удаляется |
| Блок тегов и символы частного использования | Удаляется | Удаляется | Удаляется |
| Мягкий перенос U+00AD | Удаляется | Удаляется | Удаляется |
| Необычные пробелы категории Zs | Преобразуется в U+0020 | Преобразуется в U+0020 | Преобразуется в U+0020 |
| Соединители U+200C и U+200D | Сохраняется | Удаляется вне последовательностей эмодзи | Удаляется везде |
| Селекторы вариаций | Сохраняется | Удаляется вне последовательностей эмодзи | Удаляется везде |
| Фигурные кавычки и длинные тире | Сохраняется | Сохраняется | Преобразуется в прямые кавычки и простой дефис |
Рядом с пресетами — три фильтра в одно нажатие: удалить невидимые, убрать тире и дефисы, убрать эмодзи. Публикация этих правил намеренна. Каждый конкурирующий инструмент прячет набор правил за одной кнопкой, так что непонятно, что вынули из текста, пока что-то не сломается.
Как защита Markdown-кода сохраняет блоки кода целыми?
При включённом режиме Markdown и защите очиститель пропускает блочный и встроенный код, поэтому фрагмент, которому нужен точный символ, его сохраняет.
Код — единственное место, где символ, который в прозе назвали бы мусором, несёт нагрузку. Регулярное выражение или тестовая строка могут зависеть от того, что метка порядка байтов стоит ровно там, где нужно.
Покидает ли ваш текст устройство?
Нет. И сканирование, и очистка выполняются в браузере, страница никогда не загружает и не хранит ваш текст.
Честная вторая половина — в том же дыхании. Страница бесплатна, поэтому может показывать рекламу и использовать аналитику сайта. Необязательный JSON-отчёт фиксирует, что изменилось. Вашего текста в нём нет.
Лимиты текста и файлов: 20 000 слов и 1 МБ
Очиститель принимает до 20 000 слов вставленного текста или один UTF-8 файл до 1 МБ в формате .txt или .md.
Всё остальное вне области: не HTML, DOCX, PDF, JSON или CSV, а вставка приходит только как простой текст. Требуется JavaScript. Нет аккаунта и нет оплаты. Интерфейс доступен на 26 языках. Официальные имена Юникода остаются на английском во всех из них, потому что переведённое имя символа уже нельзя цитировать.
Для фотографий, а не текста, вы можете удалить сведения ИИ из изображения или редактировать метаданные изображения.
Маркировка текста ИИ у поставщиков: сравнение ChatGPT, Claude, Gemini и Grok
Только некоторые поставщики ИИ помечают текстовый вывод, и каждый, кто это делает, использует выбор слов, а не скрытые символы.
| Поставщик | Помечает текст | Метод | Находит этот очиститель | Источник и дата |
|---|---|---|---|---|
| Anthropic, Claude | Да | Водяной знак выбора токенов, версия SynthID Text | Нет | Anthropic, объявление 11 августа 2026, техническая заметка 14 августа 2026, обновлено 1 сентября 2026 |
| Google, Gemini | Да | SynthID Text, модуляция вероятностей токенов | Нет | Google DeepMind, 14 мая 2024, позже в том же году открыт исходный код |
| OpenAI, ChatGPT | Подтверждённого текстового водяного знака нет | В продакшене для текста нет. Изображения несут C2PA и SynthID, аудио — SynthID | Не применимо | Справочная статья OpenAI о происхождении, актуальна на 2 сентября 2026 |
| xAI, Grok | Опубликованных обязательств нет | Не заявлено | Не применимо | xAI не подписала кодекс прозрачности Комиссии, сообщение от 12 августа 2026 |
Anthropic сообщает, что модели, запущенные 2 августа 2026 года или позже, несут метку с момента запуска. Компания работает над добавлением маркировки к моделям, выпущенным раньше. Детекция текстового водяного знака — не публичный проверяющий сервис. Anthropic указывает, что детекция «сейчас в закрытом предварительном доступе для подходящих организаций в соответствии с правом ЕС». В список подходящих входят регуляторы, правоохранительные органы, СМИ, фактчекеры, исследователи, образовательные учреждения и группы гражданского общества ЕС. Бесплатный Claude Content Checker, который Anthropic также предлагает, читает C2PA Content Credentials в сгенерированных файлах — это другое, чем текстовый водяной знак.
То, что xAI не подписала кодекс практики, не освобождает Grok от самого AI Act. Добровольный кодекс — путь к соответствию, а не замена закону.
Как работает текстовый водяной знак Claude?
Claude выбирает между одинаково подходящими словами, а секретный ключ решает, какое взять. Метка — это последовательность выборов, а не какой-либо символ в тексте.
Anthropic описывает механизм прямо. «Вместо произвольного генератора случайных чисел для выбора следующего слова водяной знак использует ключ и несколько предыдущих слов, чтобы определить, какое слово должна выбрать модель.» Компания также указывает, что текстовый водяной знак Claude — «версия подхода SynthID-Text, опубликованного Google DeepMind в статье Nature в 2024 году».
О устойчивости Anthropic конкретна. «Лёгкое редактирование, вероятно, не удалит водяной знак полностью», а полная переписка, где заменено каждое слово, удалит его.
Что SynthID Text помечает в выводе Gemini?
SynthID Text встраивает свой узор в вероятности токенов по мере того, как Gemini пишет. Google DeepMind объявила о текстовом водяном знаке SynthID для приложения и веб-версии Gemini 14 мая 2024 года. Метод работает «внося дополнительную информацию в распределение токенов в момент генерации путём модуляции вероятности генерации токенов». Позже в том же году DeepMind открыла метод через Responsible Generative AI Toolkit.
Опубликованные ограничения важны не меньше метода. SynthID Text лучше всего работает на длинных и более разнообразных ответах. Он плохо справляется с короткими фактическими репликами, где у модели почти нет свободы формулировок. Уверенность снова падает, когда текст основательно переписан или переведён.
Находки скрытых символов и авторство ИИ: почему одно никогда не доказывает другое?
Скрытый символ — доказательство того, что что-то обработало ваш текст, а не того, что его написал ИИ.
У каждого невидимого символа есть обычное объяснение, появившееся до эпохи ИИ-письма. Текстовые процессоры, CMS и экспортёры PDF вставляли их десятилетиями. Находка говорит, что текст прошёл через ПО, а это верно почти для каждого опубликованного предложения.
Откуда берутся невидимые символы, кроме ИИ?
Текстовые процессоры, веб-редакторы, экспорт PDF, инструменты перевода, чаты и обычное копирование сами вставляют невидимые символы.
| Источник | Какие символы часто добавляет | Почему |
|---|---|---|
| Текстовые процессоры | U+00A0, U+2019, U+2014, U+00AD | Автозамена и автоматическая расстановка переносов |
| Веб-редакторы и CMS | U+200B, U+FEFF | Подсказки переноса строк и маркеры кодировки файла |
| Экспорт PDF | U+2009, U+202F, U+00A0 | Сохранение наборных интервалов при обратном копировании текста |
| Инструменты перевода и локализации | U+200C, U+200D, U+061C | Корректное отображение арабской, персидской и индийских письменностей |
| Чаты и мессенджеры | U+200D, U+FE0F | Последовательности эмодзи и представление текста или эмодзи |
| Копирование между приложениями | U+FEFF, смешанные пробелы Zs | Преобразование кодировки в буфере обмена |
Моё тестовое предложение в 40 байт набрало четыре находки, ни разу не встретив языковую модель. В этом одно измерение — весь аргумент.
Почему длинные тире — не водяной знак
Длинное тире — обычный знак препинания, которым писатели, редакторы и автозамена пользуются веками, поэтому оно не несёт сигнала о том, кто написал предложение.
Исправление 2025 года закрывает вопрос. 14 ноября 2025 года OpenAI заявила, что ChatGPT наконец будет слушаться пользовательской инструкции не использовать длинные тире. Сэм Альтман в тот день сказал прямо: «Если вы скажете ChatGPT в пользовательских инструкциях не использовать em-dashes, он наконец делает то, что должен». Привычка, которую пользователь может отключить в настройках персонализации, никогда не была меткой. Это был стилевой узор из обучения, а исправление — предпочтение.
Этот очиститель по-прежнему предлагает удаление тире, и причина честная. Это стилевой фильтр для тех, кому нужны прямые кавычки и простые дефисы в тексте. Это не фильтр водяных знаков и не изменит вердикт любого детектора о вашем тексте.
Когда очистка ломает текст: персидский, арабский, индийские письменности и эмодзи
Удаление символов нулевой ширины может сломать корректный текст, потому что некоторым письменностям они нужны, чтобы правильно писать слова.
Я проверил четыре случая, которые ломаются чаще всего, и зафиксировал, что произошло. Персидское слово میخواهم — восемь символов, а U+200C посередине не даёт двум частям слиться. Удалите его — получите میخواهم, семь символов и другую письменную форму. В деванагари क्ष держит U+200D, образующий правильную лигатуру, и его снятие меняет форму на экране. Семейный эмодзи 👨👩👧👦 — семь кодовых точек, четыре картинки, скреплённые тремя соединителями U+200D. Уберите соединители — и он распадётся на 👨👩👧👦, четырёх отдельных людей. Красное сердце ❤️ несёт U+FE0F, чтобы отрисоваться как эмодзи, а без него та же кодовая точка откатывается к текстовому символу ❤.
Поэтому инструмент показывает находки до любой очистки, поэтому отдельные совпадения можно оставить, и поэтому «Строгий» не выбран по умолчанию. Редактор на одном языке видит чистый результат. Редактор на шести — отчёт об ошибке.
Итоговый вывод об очистке текстовых водяных знаков ИИ
Очистка невидимых символов стоит того ради чистого, переносимого и безопасного текста.
Две причины оправдывают запуск этого инструмента. Первая: скрытые символы тихо ломают вещи в результатах поиска, табличных поисках, коде и URL. Вторая: символы тегов могут нести инструкции в ИИ-ассистента, которые никто не набирал и никто не видит. Поэтому очистка — привычка безопасности, а не косметика.
Тот, кто надеется обойти водяной знак поставщика, очищает не тот слой. Claude и Gemini помечают текст в выборе слов, OpenAI помечает изображения и аудио, но не текст, и никакое удаление символов до них не дотягивается. Один способ ослабить такие статистические водяные знаки — перевести текст на пару разных языков, а затем обратно на исходный.
Вставьте одну страницу своего текста в поле ввода выше и прочитайте находки, чтобы лучше понять текст, или просто скопируйте результат.
На этом пока всё. Спасибо, что дочитали.