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

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

ZERO WIDTH NO-BREAK SPACE (U+FEFF)

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

Кодовая позиция
U+FEFF
Удаляется по умолчанию
Да
Управляющий параметр
Параметр не нужен
Может нести нагрузку
Нет

Откуда он берётся

Редакторы под Windows, выгрузки из Excel и всё, что сохраняет «UTF-8 с BOM». Склейка нескольких таких файлов оставляет BOM в середине результата. Копирование из ячейки таблицы часто утаскивает её с собой.

Почему это важно

BOM в начале ломает разбор JSON, YAML-фронтматтер, shebang в скриптах и заголовки CSV; BOM в середине — просто невидимый символ, из-за которого не совпадают две одинаковые на вид строки. Это же и причина, по которой файл настроек «выглядит нормально», но не загружается.

До и после

ДоU+FEFF{"ok": true}
После{"ok": true}

Именно из-за невидимого первого символа `JSON.parse` отказывается разбирать эту строку.

Символ показан подписанной плашкой, чтобы было видно, где он стоит. В вашем тексте он не рисует ровно ничего.

Когда он уместен

Первым символом файла, как признак кодировки, — а это свойство ФАЙЛА, а не текста. Как только текст оказался в поле для вставки, законного BOM в нём уже нет.

Как его удалить

Базовый проход удаляет её, где бы она ни стояла. Ghostchars работает с текстом, поэтому и ведущий BOM для него — тоже текст.

Это водяной знак ИИ?

Не водяной знак

Нет. BOM — артефакт кодировки, который создают редакторы и конвейеры экспорта. Он говорит о программе, сохранившей файл, и ничего не говорит о том, кто написал слова.

Никак не связан с машинно сгенерированным текстом. Он приходит из программы, с клавиатуры или от человека.

Вопросы

Почему мой JSON не разбирается?

Ведущий BOM — это символ перед открывающей фигурной скобкой. Большинство разборщиков JSON считают его недопустимым, и ошибка указывает на позицию 0, где глазу не видно ничего.

Это то же самое, что соединитель слов?

В середине текста они ведут себя одинаково. Unicode объявил такое применение U+FEFF устаревшим и назначил правильным символом U+2060 WORD JOINER, оставив U+FEFF только роль метки порядка байтов.

Бывает, что её нужно сохранить?

Только если следующий инструмент требует файл с BOM, — и тогда её добавляют при записи файла, а не таскают внутри текста.

Проверьте свой текст

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

Проверьте свой текстВсе символы