Уберите невидимый мусор из своего текста.
Вставьте что угодно. Мы найдём пробелы нулевой ширины, протащенные теговые символы, буквы-двойники и другие символы, которых вы не видите: то, что обычно называют водяным знаком ИИ. Ваши эмодзи и текст не на английском при этом не пострадают.
- Работает в браузере
- Без регистрации
- Бесплатно, без лимитов
- Открытый код
Ничего никуда не отправляется. Очистка происходит на этой странице.
Текст разбирается прямо в браузере. Нажмите «Очистить текст», чтобы увидеть результат ниже.
Базовый уровень удаляет только символы, которых вы не видите. Максимум ещё и переписывает видимый текст: буквы-двойники, кавычки, тире и пробелы. Поэтому это выбор, а не значение по умолчанию.
Дополнительно(правки сверх базовых, по умолчанию выключены)
По умолчанию уже удаляется всё, что невидимо и ничего не делает: символы нулевой ширины, метки порядка байтов, мягкие переносы, невидимые математические операторы, bidi-переопределения, одиночные теговые символы и селекторы вариантов, несимволы и прочие форматирующие символы. Всё, что ниже, идёт дальше: оно либо меняет видимый текст, либо удаляет символы, которые делают свою работу. Решать вам.
Пробелы и вёрстка
Буквы и пунктуация
Управляющие символы
Агрессивно
Нажмите Очистить текст, и мы покажем, что именно там пряталось: сначала обычными словами, а под ними кодовые позиции, если они вам нужны.
- Ваш текст не покидает страницуНикакой отправки на сервер, никаких запросов, никакой аналитики по тому, что вы вставили. Отключите Wi-Fi, и всё продолжит работать.
- Бесплатно, без лимитов и аккаунтаНи ограничения на число символов, ни дневных квот, ни формы с почтой перед результатом.
- Побеждает 11 реальных схем сокрытияДвоичный код на символах нулевой ширины, контрабанда теговых символов, байты в селекторах вариантов, пробелы SNOW, омоглифы, двоичный код на NFC/NFD и ещё пять.
- Тот же движок, что в CLIУ инструмента на Python и у этой страницы один свод правил, поэтому проверка в pre-commit и вставка в браузере дают один и тот же ответ.
Вставьте, очистите, скопируйте.
Вот и всё. Остальное на этой странице можно не читать.
Вставьте текст
Прямо из чата, PDF, переводчика, ИИ-ассистента или письма коллеги. Скрытые символы приезжают вместе с текстом, в этом всё и дело.
Нажмите «Очистить текст»
Мы проходим текст символ за символом и по каждому подозрительному решаем: он прячется или работает. Видимые слова остаются нетронутыми.
Скопируйте чистый текст
Одна кнопка. Нужны доказательства? Откройте таблицу находок: там каждый символ с местом в тексте, кодовой позицией и официальным именем Unicode.
Та же очистка без этой вкладки.
Очистка выше бесплатна и без ограничений, такой она и останется. Приложение для Mac, расширение для браузера и CLI ставят тот же движок туда, где ваш текст уже есть: одно сочетание клавиш, один правый клик или одна команда.
Ghostchars для Mac
Приложение в строке меню: выделите текст в любом месте на Mac, нажмите сочетание клавиш, и на его месте окажется очищенная версия. Или пусть чистит при копировании: тогда вставляется уже чистое.
Сочетание клавиш и очистка при копировании бесплатны 20 раз в неделю; собственное окно приложения и его отчёты не считаются никогда.
Взять для MacGhostchars для Chrome
Окно, которое чистит вставку на любом сайте, и пункт контекстного меню, который заменяет выделенный текст прямо на месте. Включите очистку при вставке для сайтов, куда вы вставляете часто, и вместо скопированного туда попадёт очищенное.
Окно и контекстное меню работают без ограничений на любом сайте; очистка при вставке бесплатна 20 раз в неделю. Оно устанавливается из Chrome Web Store, в Chrome, Edge, Brave, Arc, Opera.
Посмотреть расширениеGhostchars в терминале
Пакет npm с тем же движком: чистите файлы и документы из командной строки, держите репозиторий на заданной планке в CI и дайте агенту для кода эти инструменты через MCP. Внутри лежат файлы скилла, хук для Claude Code и блок для pre-commit.
Бесплатно и под лицензией MIT, Node 22 или новее, и ничто не покидает вашу машину: в пакете нет сетевого кода.
Посмотреть CLIОдна лицензия на всё: $24 один раз снимает недельный лимит у обоих, на 3 ваших устройствах, а всё на этом сайте в любом случае остаётся бесплатным.
Шесть семейств символов, которых вы не видите.
Около 26 разных типов символов, сгруппированных по семействам, которые и правда ведут себя по-разному.
Символы нулевой ширины
Не занимают места, переживают копирование и способны закодировать целое сообщение в двоичном виде. Классический способ пометить документ под каждого получателя.
U+200B ZWSP · U+200C ZWNJ · U+200D ZWJ · U+2060 WORD JOINER · U+FEFF BOM
Управление направлением (bidi)
Меняют порядок отображения текста. Рядом с ивритом или арабским они безобидны; в остальных случаях это способ заставить исходный код читаться одним, а компилироваться другим.
U+202A-202E · U+2066-2069 · U+200E LRM · U+200F RLM · U+061C ALM
Теговые символы
Теневой алфавит ASCII. Целое предложение помещается в 14-ю плоскость и отрисовывается ровно ничем: на этом и построен ASCII smuggling, контрабанда команд в ИИ-ассистенты.
U+E0001 · U+E0020-E007E · U+E007F CANCEL TAG
Селекторы вариантов
Нужны, чтобы выбрать вид эмодзи или начертание глифа. Одиночные несут по байту каждый, так что к любому символу элементарно прицепить длинную невидимую нагрузку.
U+FE00-FE0F · U+E0100-E01EF
Пробелы и разделители
Не всякий пробел набран пробелом. Подмена обычного пробела неразрывным или лишний пробел в конце строки кодируют биты, которых никто не видит.
U+00A0 · U+2000-200A · U+202F · U+205F · U+3000 · U+2028 · U+2029
Буквы-двойники
Кириллическая а не равна латинской a, но на экране их не отличить. В нашей таблице 1513 записей, собранных из confusables.txt самого Unicode.
U+0430 а · U+043E о · U+0435 е · U+03BF ο · U+0456 і · U+FF41 a
Почему ваши эмодзи выживают.
Один и тот же символ может быть тайником, а может быть несущей конструкцией. Инструменты, которые удаляют по одной лишь кодовой позиции, всё ломают; осторожные пропускают многое. Мы смотрим на соседей.
Оставлен: он держит семью вместе
U+200D стоит между двумя эмодзи. Уберите его, и семья рассыплется на трёх отдельных людей. Тот же символ, та же кодовая позиция, совершенно другая работа.
Удалён: он прячется между двумя буквами
Точно такой же U+200D между двумя латинскими буквами не соединяет ничего. Он здесь, чтобы пережить копирование и унести с собой бит чьего-то водяного знака.
🏴 остаётся флагом
Внутри флага Шотландии теговые символы складываются в «gbsct». Одиночные теговые символы удаляются, а те, что входят в корректную последовательность флага, остаются.
Персидский и хинди сохраняют свои соединители
Разъединитель нулевой ширины внутри персидского слова меняет то, как соединяются буквы. Удалите его, и слово написано с ошибкой. Мы его сохраняем и говорим вам, что он там есть.
Иврит сохраняет свои метки направления
RLM рядом с текстом на иврите действительно управляет вёрсткой. RLM посреди английского не управляет ничем. И тот и другой записаны как U+200F.
Чего этот инструмент не умеет.
Множество сайтов обещают «убрать водяные знаки ИИ». Вот где очистка символов действительно заканчивается, чтобы вы не рассчитывали на неё там, где она никогда и не работала.
- Статистические водяные знаки остаются на месте. Такие схемы, как SynthID-Text от Google, зашиты в то, какие слова выбрала модель, а не в символы. Ничто из удаляемого их не задевает. Их убирает переписывание текста.
- Стилометрию это не трогает. Классификаторы ИИ-детекторов читают ритм предложений, словарь и структуру. Выпрямление кавычек не меняет из этого ничего.
- Сокрытие на уровне формата к этой странице не относится. Метаданные в DOCX, белый текст по белому в PDF, комментарии в HTML живут в файле, а не в тексте. Вставьте текст, и мы очистим текст; целый файл несите на страницу «Документы».
- Длинное тире уликой не является. По запросу мы переведём типографскую пунктуацию в ASCII, но человек, который пишет хорошо, тоже ставит длинные тире. Считайте это оформлением, а не доказательством.
На что мы претендуем: одиннадцать опубликованных техник стеганографии на уровне символов, каждая побеждена в тестах, и видимый текст после этого остался побайтово тем же.
Kris Vinters создаёт и поддерживает Ghostchars. На странице «О проекте» описаны правила, из которых следуют эти ограничения.
Что такое «водяной знак ИИ» на самом деле и что из него можно убрать?
В основном те, кто что-то куда-то вставил.
Авторы и студенты
Текст прошёл через три приложения, прежде чем попал в ваш документ. Очистите его один раз, чтобы система сдачи работ или антиплагиат не споткнулись о символы, которых вы не набирали.
Переводчики
CAT-программы и машинный перевод оставляют за собой неразрывные пробелы, мягкие переносы и случайные bidi-метки. Очистите невидимый слой, не тронув соединители, без которых не обойтись языку перевода.
Издатели и команды CMS
Тексты авторов приходят из Word, Google Документов и почты. Приведите их к общему виду до попадания в базу и сохраните отчёт о том, что изменилось.
Разработчики
Запускайте --check в pre-commit-хуке и роняйте коммит, если невидимый символ или bidi-переопределение попали в исходники, конфиг или файл локализации.
Безопасность и AI safety
Разбирайте подозрительные нагрузки для prompt injection: смотрите предложение из теговых символов, кодовые позиции и точные смещения, а уже потом решайте, что делать с этим вводом.
Все, кому прислали странный файл
Если документ выглядит нормально, но ведёт себя странно (поиск не находит, сортировка ломается, имя не совпадает), сначала вставьте его сюда. Обычно виноват символ, которого вы не видите.
Посмотрите, как это работает
Одна и та же очистка в трёх местах: этот сайт, расширение браузера, которое очищает вставку прямо в поле, где вы уже печатаете, и горячая клавиша на Mac, очищающая буфер обмена из любой программы. Все три работают на вашей собственной машине.
Смотреть
Ghostchars в вебе, в Chrome и на Mac
30 секунд · Субтитры включены
Тот же движок в вашем терминале.
strip_invisible.py помещается в один файл на Python без зависимостей. Ничего не нужно устанавливать, никакому пакету не нужно доверять: скачайте, прочитайте, запустите.
# Посмотреть, что прячется, ничего не меняя
python3 strip_invisible.py --show file.md
# Очистить на месте и заодно нормализовать пробелы и пунктуацию
python3 strip_invisible.py -i -s --punct draft.md
# Уронить сборку, если невидимые символы попали в репозиторий
python3 strip_invisible.py --check src/**/*.ts
# И документы тоже: скрытые фрагменты, исправления, метаданные, rsid
python3 clean_file.py --show essay.docxКод возврата 1, если что-то найдено, поэтому инструмент прямо ложится в pre-commit-хук или шаг CI. Каждому переключателю в разделе «Дополнительно» выше соответствует один флаг.
То, о чём разумно спросить.
Мой текст куда-нибудь отправляется?
Нет. Всё работает на JavaScript прямо на этой странице. При нажатии «Очистить текст» на сервер не уходит ни одного запроса, и ничто из вставленного не логируется и не сохраняется. Хотите проверить? Откройте вкладку «Сеть» в браузере или просто отключитесь от интернета и работайте офлайн.
Он не сломает мои эмодзи?
С настройками по умолчанию не сломает. Соединители нулевой ширины между эмодзи, селекторы вариантов, задающие эмодзи-начертание, и теговые символы внутри флаговых последовательностей распознаются как несущие нагрузку, сохраняются и попадают в отчёт, чтобы вы их видели. Удалить их можно единственным способом: осознанно включить «Удалять склейку, даже когда она важна» в разделе «Дополнительно».
Он работает с арабским, ивритом, хинди и персидским?
Да, и ради этого он в первую очередь и существует. Разъединители нулевой ширины внутри персидских слов, соединители в индийских письменностях и метки направления рядом с текстом справа налево меняют то, как читается текст, поэтому по умолчанию они сохраняются. Те же символы, затерявшиеся посреди английского, удаляются.
Он может убрать водяной знак ИИ?
Он убирает водяные знаки на уровне символов: те, что прячут данные в невидимых кодовых позициях, узорах из пробелов или буквах-двойниках. Он не убирает статистические водяные знаки вроде SynthID-Text, которые живут в выборе слов, и не меняет оценку, которую поставит вашему тексту ИИ-детектор. Любой инструмент, утверждающий обратное, преувеличивает.
Почему символ есть в списке, но не удалён?
Две причины. Либо он несёт нагрузку и без него текст будет отображаться иначе, либо для него нужна настройка, выключенная по умолчанию, потому что она меняет видимый текст: например, буквы-двойники или типографские кавычки. В обоих случаях в таблице находок названа та самая настройка, которая его удалит, так что молча не игнорируется ничего.
Что такое атака ASCII smuggling?
В Unicode есть блок «теговых» символов (U+E0000-E007F), которые повторяют ASCII, но не отрисовываются вообще ничем. Целую инструкцию можно записать ими и вставить в документ: языковая модель её прочитает, а человек, проверяющий документ, не увидит ничего. Одиночные теговые символы мы удаляем по умолчанию и показываем, что в них было написано.
Чем NFC отличается от NFKC?
NFC выбирает одно написание для букв с диакритикой: é одной кодовой позицией, а не e плюс комбинируемый акцент. Случайный выбор между двумя формами сам по себе способ кодировать биты. NFKC идёт дальше и сводит к простым эквивалентам ещё и полноширинные буквы, лигатуры и надстрочные знаки; это агрессивнее, чем нужно большинству текстов.
Есть ли ограничение на объём текста?
Ни квот, ни аккаунта. Практический предел ставит ваш браузер. Несколько сотен тысяч символов проходят нормально, а дальше лучше подойдёт версия для терминала: она читает файлы потоком и обрабатывает целые каталоги.
Меняется ли внешний вид текста после очистки?
С настройками по умолчанию не меняется: удаляются только символы, которые не отрисовываются ничем. Это и есть проверка, которой мы держим инструмент: прогнать его по стеганографической схеме, и видимый текст должен выйти побайтово тем же. Параметры в разделе «Дополнительно» намеренно нарушают это правило, поэтому у каждого написано, что именно он меняет.
Чем это отличается от поиска с заменой?
Поиск с заменой удаляет все вхождения кодовой позиции. Именно так инструменты и кромсают семейные эмодзи и персидское написание. Здесь решение принимается по каждому вхождению отдельно, с учётом соседних символов, и по каждому показан ход рассуждений с номером строки и столбца.