Руководство
Найти скрытые символы в VS Code
Включите подсветку Unicode, найдите нулевые символы экранированным регулярным выражением и очистите файл до ошибки сборки или странного diff.
Автор: Kris Vinters · Опубликовано · 3 мин чтения
Сначала используйте подсветку Unicode в VS Code
Откройте Settings и найдите Unicode Highlight. VS Code делит предупреждения на невидимые, неоднозначные и не-ASCII символы. Наведите указатель на подсветку, чтобы увидеть причину. Значения могут зависеть от доверия к workspace, комментариев, строк, шрифтов и разрешённых локалей.
Три основных параметра управляют классами отдельно. Включайте нужный класс, а не считайте ошибкой весь Unicode. Не-ASCII буквы нормальны в переводах, именах и тестах; невидимые управляющие символы требуют точной проверки.
editor.unicodeHighlight.invisibleCharacterseditor.unicodeHighlight.ambiguousCharacterseditor.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 или используйте очистку с более широкой таблицей.
Почему один нулевой символ может сломать сборку?
Парсеры, идентификаторы, контрольные суммы и точные сравнения работают с кодовыми позициями, а не внешним видом. Невидимый код может разделить токен или сделать одинаковые на вид строки разными.
Другие практические объяснения собраны в разделе всех руководств о скрытых символах и границах очистки.