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

Руководство

Найти скрытые символы в VS Code

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

Автор: Kris Vinters · Опубликовано · 3 мин чтения

Сначала используйте подсветку Unicode в VS Code

Откройте Settings и найдите Unicode Highlight. VS Code делит предупреждения на невидимые, неоднозначные и не-ASCII символы. Наведите указатель на подсветку, чтобы увидеть причину. Значения могут зависеть от доверия к workspace, комментариев, строк, шрифтов и разрешённых локалей.

Три основных параметра управляют классами отдельно. Включайте нужный класс, а не считайте ошибкой весь Unicode. Не-ASCII буквы нормальны в переводах, именах и тестах; невидимые управляющие символы требуют точной проверки.

  • editor.unicodeHighlight.invisibleCharacters
  • editor.unicodeHighlight.ambiguousCharacters
  • editor.unicodeHighlight.nonBasicASCII

Подсветка помогает при ревью, но не заменяет полную проверку безопасности. VS Code называет класс неоднозначности эвристическим; шрифт и локаль влияют на результат.

Ищите экранированным регулярным выражением

Откройте поиск, включите регулярные выражения и введите показанный шаблон. Он состоит только из видимого ASCII, но ищет U+200B по U+200D и U+FEFF. Проверяйте каждое совпадение перед заменой.

Regex: [\u200B-\u200D\uFEFF]

Диапазон охватывает ZERO WIDTH SPACE, ZERO WIDTH NON-JOINER, ZERO WIDTH JOINER и символ метки порядка байтов. Для WORD JOINER отдельно ищите \u2060. Не удаляйте автоматически соединитель, который может нести нагрузку в эмодзи или связном письме.

Скрытый символ может разделить идентификатор, сделать ключи разными, нарушить поиск, изменить токен парсера или создать diff в визуально прежней строке. Метка в начале файла также может обрабатываться иначе, чем тот же код в середине.

U+200B ZERO WIDTH SPACEU+200D ZERO WIDTH JOINERU+FEFF ZERO WIDTH NO-BREAK SPACEU+2060 WORD JOINER

Очистите весь текст и проверьте находки

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

Для поддерживаемого .html, а также документов .docx и .odt используйте отчёт по документу. Произвольные исходные форматы он не принимает, поэтому для .js, .ts, .json и .md нужна очистка через вставку.

Открыть очистку нулевых символовОткрыть отчёт по документу

Скрытый символ может объяснить ошибку сборки или diff. Он не объясняет, кто написал код или прозу. Очистка работает с кодовыми позициями; отчёт о стиле выдаёт измерения без вердикта.

Вопросы о скрытых символах в VS Code

Подсвечивает ли VS Code все невидимые символы по умолчанию?

Нет. Значения и исключения могут зависеть от доверия к workspace, комментариев, строк, разрешённых символов и локалей. Найдите Unicode Highlight и проверьте действующие настройки.

Находит ли regex все скрытые символы Unicode?

Нет. Он ищет U+200B по U+200D и U+FEFF. Добавьте коды вроде \u2060 для WORD JOINER или используйте очистку с более широкой таблицей.

Почему один нулевой символ может сломать сборку?

Парсеры, идентификаторы, контрольные суммы и точные сравнения работают с кодовыми позициями, а не внешним видом. Невидимый код может разделить токен или сделать одинаковые на вид строки разными.

Другие практические объяснения собраны в разделе всех руководств о скрытых символах и границах очистки.

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

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