Нулевая ширина и невидимые
ZERO WIDTH NO-BREAK SPACE (U+FEFF)
Метка порядка байтов. В самом начале файла она объявляет кодировку; в любом другом месте это невидимое неразрывное ничто, применение которого Unicode считает устаревшим начиная с версии 3.2.
- Кодовая позиция
U+FEFF- Категория
- Нулевая ширина и невидимые
- Удаляется по умолчанию
- Да
- Управляющий параметр
- Параметр не нужен
- Может нести нагрузку
- Нет
Откуда он берётся
Редакторы под Windows, выгрузки из Excel и всё, что сохраняет «UTF-8 с BOM». Склейка нескольких таких файлов оставляет BOM в середине результата. Копирование из ячейки таблицы часто утаскивает её с собой.
Почему это важно
BOM в начале ломает разбор JSON, YAML-фронтматтер, shebang в скриптах и заголовки CSV; BOM в середине — просто невидимый символ, из-за которого не совпадают две одинаковые на вид строки. Это же и причина, по которой файл настроек «выглядит нормально», но не загружается.
До и после
Именно из-за невидимого первого символа `JSON.parse` отказывается разбирать эту строку.
Символ показан подписанной плашкой, чтобы было видно, где он стоит. В вашем тексте он не рисует ровно ничего.
Когда он уместен
Первым символом файла, как признак кодировки, — а это свойство ФАЙЛА, а не текста. Как только текст оказался в поле для вставки, законного BOM в нём уже нет.
Как его удалить
Базовый проход удаляет её, где бы она ни стояла. Ghostchars работает с текстом, поэтому и ведущий BOM для него — тоже текст.
Это водяной знак ИИ?
Не водяной знак
Нет. BOM — артефакт кодировки, который создают редакторы и конвейеры экспорта. Он говорит о программе, сохранившей файл, и ничего не говорит о том, кто написал слова.
Никак не связан с машинно сгенерированным текстом. Он приходит из программы, с клавиатуры или от человека.
Вопросы
Почему мой JSON не разбирается?
Ведущий BOM — это символ перед открывающей фигурной скобкой. Большинство разборщиков JSON считают его недопустимым, и ошибка указывает на позицию 0, где глазу не видно ничего.
Это то же самое, что соединитель слов?
В середине текста они ведут себя одинаково. Unicode объявил такое применение U+FEFF устаревшим и назначил правильным символом U+2060 WORD JOINER, оставив U+FEFF только роль метки порядка байтов.
Бывает, что её нужно сохранить?
Только если следующий инструмент требует файл с BOM, — и тогда её добавляют при записи файла, а не таскают внутри текста.
Проверьте свой текст
Вставьте что угодно в инструмент очистки, чтобы увидеть каждый скрытый символ: позицию, кодовую позицию и то, что произойдёт с каждым из них. Ничего никуда не отправляется.