Перейти к содержимому
Ghostchars

Что находит Ghostchars

Каждая категория, о которой умеет сообщить движок, параметр, который ею управляет, и кодовые позиции со своей страницей. Вставьте текст в поле ниже, чтобы увидеть, какие из них в нём есть.

Удаляется базовым проходомСохраняется, когда несёт нагрузкуНужен параметр

Ничего никуда не отправляется. Очистка происходит на этой странице.

Текст разбирается прямо в браузере. Нажмите «Очистить текст», чтобы увидеть результат ниже.

Уровень очистки

Базовый уровень удаляет только символы, которых вы не видите. Максимум ещё и переписывает видимый текст: буквы-двойники, кавычки, тире и пробелы. Поэтому это выбор, а не значение по умолчанию.

По умолчанию уже удаляется всё, что невидимо и ничего не делает: символы нулевой ширины, метки порядка байтов, мягкие переносы, невидимые математические операторы, bidi-переопределения, одиночные теговые символы и селекторы вариантов, несимволы и прочие форматирующие символы. Всё, что ниже, идёт дальше: оно либо меняет видимый текст, либо удаляет символы, которые делают свою работу. Решать вам.

Пробелы и вёрстка

Неразрывный, тонкий и идеографический пробелы станут обычными. Выключено, потому что неразрывный пробел часто поставлен намеренно.
CRLF, CR, NEL и разделители строк и абзацев Unicode станут обычным переводом строки.
Убирает полосу, которую терминал копирует перед каждой строкой цитаты. Выключено, потому что такую же полосу используют деревья папок.
Пробелы, оставленные в конце строки, могут кодировать скрытое сообщение (техника SNOW).
Двойные пробелы между словами могут нести двоичные данные. Выключено, потому что это ломает вёрстку с фиксированной шириной.

Буквы и пунктуация

Кириллическая с в слове «Miсrosoft» станет латинской c. Срабатывает только внутри слов со смешанной письменностью, так что обычный русский или греческий текст остаётся нетронутым. Выключено по умолчанию, потому что меняет буквы, которые вы видите.
Длинное тире, типографские кавычки, многоточие и знак минуса станут ASCII. Их часто считают «приметой ИИ», но это ещё и просто хорошая типографика.
Составленные и разложенные диакритики (é одним символом или двумя) могут кодировать биты. NFC оставляет одну форму.
Дополнительно сводит полноширинные, надстрочные и лигатурные формы. Меняет больше, чем можно ожидать, и заменяет собой NFC.

Управляющие символы

Bidi-переопределения и метки внутри текста слева направо удаляются и так. Этот параметр удалит ещё и метки рядом с ивритом или арабским, где они действительно управляют вёрсткой.
Управляющие символы C0 и C1, кроме табуляции и перевода строки.
Ломает иконочные шрифты и некоторые фирменные глифы, а именно там такие символы обычно и живут.

Агрессивно

Удаляет все соединители нулевой ширины и селекторы вариантов, в том числе те, что держат вместе 👨‍👩‍👧, и те, без которых не обойтись персидскому, хинди и флаговым последовательностям. Включайте, только если нужны голые буквы и ничего больше.

ZWSPTAG U+E0053

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

Таблицы ниже говорят, на что движок реагирует. Где его запускать: это отдельный вопрос. Если текст лежит в файле, отчёт по документу открывает .docx, .odt или .html прямо в браузере и перечисляет скрытые фрагменты, исправления и данные об авторе рядом с символами. А если текст вы собираетесь куда-то вставить, расширение для Chrome чистит его прямо в том поле, где вы печатаете.

Ничего из этого не касается того, как текст читается. Этим занят отчёт о стиле: он измеряет разброс длин предложений, дежурные связки, смягчающие обороты и плотность тире и отдаёт числа без баллов, без вероятности и без вердикта о том, кто написал текст.

По категориям

Категории проверяются в этом порядке, и побеждает первое совпадение, поэтому пробел нулевой ширины попадает в отчёт как символ нулевой ширины, а не как общий форматирующий символ.

Нулевая ширина и невидимые

Управляющий параметр Базовый проход (всегда включено)

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

КодИмяБазовый проход
U+200BZERO WIDTH SPACEДа
U+2060WORD JOINERДа
U+00ADSOFT HYPHENДа
U+FEFFZERO WIDTH NO-BREAK SPACEДа
U+2061FUNCTION APPLICATIONДа
U+2062INVISIBLE TIMESДа
U+2063INVISIBLE SEPARATORДа
U+2064INVISIBLE PLUSДа
U+034FCOMBINING GRAPHEME JOINERДа
U+180EMONGOLIAN VOWEL SEPARATORДа
U+2800BRAILLE PATTERN BLANKДа
U+3164HANGUL FILLERДа
U+FDD0-U+FDEFNONCHARACTERSДа

Переопределения направления

Управляющий параметр Базовый проход (всегда включено)

Пять символов встраивания и переопределения. Они переставляют текст, который им не принадлежит: именно так имя файла можно показать не тем, чем оно является. Нет такого контекста, в котором Ghostchars оставил бы хоть один из них.

КодИмяБазовый проход
U+202ERIGHT-TO-LEFT OVERRIDEДа
U+202DLEFT-TO-RIGHT OVERRIDEДа
U+202ALEFT-TO-RIGHT EMBEDDINGДа
U+202BRIGHT-TO-LEFT EMBEDDINGДа
U+202CPOP DIRECTIONAL FORMATTINGДа

Метки направления

Управляющий параметр Bidi-метки --bidi

Подсказки о направлении: метки «слева направо» и «справа налево», метка арабской буквы и четыре изолята. Рядом с текстом справа налево они снимают настоящую неоднозначность и сохраняются; в английском абзаце это невидимая набивка и опубликованный носитель стеганографии, поэтому они удаляются.

КодИмяБазовый проход
U+200ELEFT-TO-RIGHT MARKЕсли одиночный
U+200FRIGHT-TO-LEFT MARKЕсли одиночный
U+061CARABIC LETTER MARKЕсли одиночный
U+2066-U+2069BIDIRECTIONAL ISOLATESЕсли одиночный

Соединители, селекторы и заполнители

Управляющий параметр Агрессивно -a

Невидимые символы, которые связываются с соседом слева или справа: соединитель и разъединитель нулевой ширины, селекторы вариантов, теговые символы и заполнители монгольского письма, кхмерского и хангыля. Сохраняются, когда соседи заставляют их нести нагрузку, и удаляются, когда стоят сами по себе.

КодИмяБазовый проход
U+200DZERO WIDTH JOINERЕсли одиночный
U+200CZERO WIDTH NON-JOINERЕсли одиночный
U+FE00-U+FE0FVARIATION SELECTORSЕсли одиночный
U+E0000-U+E007FTAG CHARACTERSЕсли одиночный
U+180B-U+180DMONGOLIAN FREE VARIATION SELECTORSЕсли одиночный
U+17B4-U+17B5KHMER INHERENT VOWELSЕсли одиночный
U+115F-U+1160HANGUL JAMO FILLERSЕсли одиночный

Любой другой форматирующий символ

Управляющий параметр Базовый проход (всегда включено)

Правило на всё остальное. Каждый оставшийся символ с общей категорией Unicode Cf удаляется, поэтому форматирующий символ, добавленный в будущей версии Unicode, будет пойман без изменения кода. Орфографические исключения (арабские знаки числа, сирийский знак сокращения, знак числа кайтхи) сопоставляются раньше и остаются нетронутыми.

Определяется по свойству Unicode, а не по списку, поэтому фиксированного набора кодовых позиций для перечисления нет.

Символы частного использования

Управляющий параметр Символы частного использования --pua

Кодовые позиции, которые Unicode никогда не назначит: их смысл задаёт частная договорённость между шрифтом и приложением. Здесь живут иконочные шрифты, поэтому удаление включается вручную: в текстах интерфейса такие символы и есть содержимое.

КодИмяБазовый проход
U+E000-U+F8FFPRIVATE USE AREAНет

Экзотические пробелы

Управляющий параметр Пробелы -s

Пробелы, отличные от U+0020: неразрывный, узкий и средний, идеографический, огамический знак пробела и одиннадцать типографских пробелов фиксированной ширины. Их заменяют обычным пробелом, а не удаляют, потому что они разделяют слова.

КодИмяБазовый проход
U+00A0NO-BREAK SPACEНет
U+202FNARROW NO-BREAK SPACEНет
U+205FMEDIUM MATHEMATICAL SPACEНет
U+3000IDEOGRAPHIC SPACEНет
U+1680OGHAM SPACE MARKНет
U+2000-U+200AGENERAL PUNCTUATION SPACESНет

Разделители строк

Управляющий параметр Концы строк -n

Разделители строк и абзацев Unicode и пришедший из EBCDIC NEL. Сводятся к обычному переводу строки, а не удаляются: удаление склеило бы две строки.

КодИмяБазовый проход
U+2028LINE SEPARATORНет
U+2029PARAGRAPH SEPARATORНет
U+0085NEXT LINEНет

Управляющие символы

Управляющий параметр Управляющие символы --controls

Управляющие коды C0 и C1, кроме табуляции, перевода строки и возврата каретки. Их присутствие в тексте обычно означает сбой декодирования или намеренную проверку на прочность.

КодИмяБазовый проход
U+0000-U+001FC0 CONTROL CHARACTERSНет
U+0080-U+009FC1 CONTROL CHARACTERSНет

Типографская пунктуация

Управляющий параметр Пунктуация --punct

Типографские кавычки, длинное и среднее тире, многоточие, знак минуса и штрихи. Здесь ничего не спрятано, все эти символы видимы, но их кодовые позиции отличаются от ASCII-форм, а выбор между прямым и типографским апострофом даёт опубликованный канал в один бит на апостроф.

КодИмяБазовый проход
U+2013EN DASHНет
U+2014EM DASHНет
U+2019RIGHT SINGLE QUOTATION MARKНет
U+2026HORIZONTAL ELLIPSISНет

Полосы цитат из терминала

Управляющий параметр Полосы цитат --gutters

Полоса, которую терминал рисует слева от цитаты и которая при копировании попадает в текст в начале каждой строки. Полоса учитывается, только если она открывает строку и тот же символ больше не встречается дальше в этой строке, поэтому таблица, нарисованная символами рамок, остаётся нетронутой. Уходит вместе с одним пробелом после неё. Включается вручную, потому что дерево папок, выведенное в терминале, начинает строки с такой же полосы.

КодИмяБазовый проход
U+2502│ BOX DRAWINGS LIGHT VERTICALНет
U+2503┃ BOX DRAWINGS HEAVY VERTICALНет
U+258C▌ LEFT HALF BLOCKНет
U+258D▍ LEFT THREE EIGHTHS BLOCKНет
U+258E▎ LEFT ONE QUARTER BLOCKНет
U+258F▏ LEFT ONE EIGHTH BLOCKНет

Буквы-двойники

Управляющий параметр Буквы-двойники --confusables

Кириллические, греческие, армянские, чероки, полноширинные и математические буквы, которые рисуются точно так же, как латинские. В таблице соответствий 1513 записей, собранных из данных Unicode о похожих символах, и двойник учитывается только внутри слова со смешанной письменностью, то есть цепочки букв, где вместе с ним есть хотя бы одна ASCII-буква или цифра, как в «Miсrosoft». Слово, целиком написанное кириллицей или по-гречески, никогда не станет находкой и не будет тронуто. И всё равно включается вручную, потому что меняет буквы, которые вы видите.

КодИмяБазовый проход
U+0430CYRILLIC SMALL LETTER AНет
U+043ECYRILLIC SMALL LETTER OНет
U+0435CYRILLIC SMALL LETTER IEНет
U+0441CYRILLIC SMALL LETTER ESНет

Параметры

Базовому проходу не нужен ни один параметр, и он включён всегда. Всё остальное выключено, пока вы это не включите, и каждый из них меняет видимый текст; именно поэтому он и выключен.

ПараметрФлаг CLIЧто делаетПочему не по умолчанию
Базовый проход(всегда включено)Символы нулевой ширины, метка порядка байтов, мягкие переносы, невидимые математические операторы, bidi-переопределения, одиночные теговые символы, одиночные селекторы вариантов, несимволы, все оставшиеся форматирующие символы Cf и одиночная склейка.Включён всегда. Ничто из удаляемого им не видно и не несёт нагрузку.
Агрессивно-aУдаляет склейку даже там, где она несёт нагрузку.Ломает эмодзи-семьи, персидское и индийское написание, флаги регионов и варианты глифов CJK.
Пробелы-sЗаменяет неразрывные и экзотические пробелы обычным.Неразрывный пробел обычно делает своё дело: французская пунктуация, «10 км», вёрстка CJK.
Концы строк-nСводит CRLF, CR, NEL, U+2028 и U+2029 к обычному переводу строки.Смена концов строк меняет файл, а некоторые конвейеры на них завязаны.
Bidi-метки--bidiУдаляет метки направления и изоляты даже рядом с текстом справа налево.Ломает вёрстку смешанного текста на иврите, арабском и персидском.
Управляющие символы--controlsУдаляет управляющие символы C0 и C1, оставляя табуляцию и переводы строк.В обычном тексте они редки, и их появление обычно указывает на проблему с кодировкой, которую лучше чинить в источнике.
Символы частного использования--puaУдаляет кодовые позиции из областей частного использования.Там живут глифы иконочных шрифтов; их удаление опустошит подписи в интерфейсе.
Пунктуация--punctПереводит длинное и среднее тире, типографские кавычки, многоточие и знак минуса в ASCII.Это типографика, а не сокрытие. Её замена делает прозу хуже, а не человечнее.
Буквы-двойники--confusablesОтображает 1513 похожих кодовых позиций на их латинские двойники, но только внутри слов со смешанной письменностью.Меняет буквы, которые вы видите. Чистый кириллический, греческий или турецкий текст остаётся нетронутым, а слово со смешанной письменностью меняется, поэтому включать это нужно осознанно.
Полосы цитат--guttersУбирает полосу цитаты, которую терминал копирует в начале каждой строки, вместе с пробелом после неё.Дерево папок или рамка, нарисованная текстом, может начинать строки с такой же полосы.

Параметры для всего текста

Ещё четыре параметра переписывают шаблоны, а не отдельные символы, поэтому своей категории у них нет.

Нормализация (NFC)

Собирает букву и её диакритику в одну кодовую позицию.

Меняет байты, которые и так корректны, и побеждает стеганографию на формах нормализации только по вашей просьбе.

--nfc

Нормализация (NFKC)

NFC плюс сведение стилизованных математических букв, лигатур и полноширинных форм к простым эквивалентам.

С потерями: 𝐛𝐨𝐥𝐝 становится bold, и оформление пропадает навсегда.

--nfkc

Пробелы в конце строк

Удаляет пробелы и табуляции в конце каждой строки.

Два пробела в конце строки задают жёсткий перенос в Markdown.

--trailing

Схлопывание пробелов

Схлопывает серии пробелов внутри строки в один, сохраняя отступ.

Некоторые форматы на этих сериях и держатся: выровненные таблицы, ASCII-графика, код.

--collapse

Каждый символ со своей страницей

У каждого из них есть собственная страница: что это, откуда берётся, когда он уместен и честный ответ на вопрос, водяной ли это знак ИИ.

Открыть указатель символов

Вопросы

Сколько символов он находит?

Таблицы точно называют несколько сотен кодовых позиций, а два общих правила покрывают по свойству Unicode все оставшиеся форматирующие символы и все кодовые позиции частного использования, поэтому символ, добавленный в будущей версии Unicode, будет найден без изменения кода. Сверх этого таблица двойников охватывает 1513 кодовых позиций.

Базовый проход безопасно запускать на чём угодно?

Он для этого и сделан: базовый проход удаляет только символы, которые невидимы И не делают работы в своём контексте. Все видимые символы он оставляет в покое, включая неразрывные пробелы, типографские кавычки и длинные тире. Чтобы изменить и их, нужно попросить.

А если моего символа здесь нет?

Вставьте текст в инструмент и посмотрите, что скрыто. Всё, что движок классифицирует, попадает в отчёт с позицией, кодовой позицией, именем Unicode и категорией, независимо от того, есть ли у символа страница здесь.

Анонимная статистика?

Ghostchars обрабатывает ваш текст в браузере и никуда его не отправляет. Мы хотели бы считать просмотры страниц через собственный сервер аналитики, почти без cookie: содержимое не собирается никогда.