Заставьте emacs не удалить BOM из XML-файлов

Я использую Emacs для редактирования XML-файла, который также читается другим приложением. Другое приложение требует, чтобы файл запустился с маркера порядка байтов (BOM). Однако Emacs, кажется, удаляет BOM каждый раз, когда я редактирую файл. Существует ли способ заставить Emacs оставить BOM в покое?

8
задан 15.09.2009, 00:06

3 ответа

Emacs запишет BOM или не в зависимости от того, какое кодирование системы он использует. Emacs автоматически выбирает систему кодирования, которую он использует при посещении файла.

Можно изменить систему кодирования на utf-8-with-signature, который скажет Emacs писать BOM.

Изменить систему кодирования посещаемого файла:

C-x RET r utf-8-with-signature RET

Можно установить систему кодирования, которую Emacs использует для конкретного файла путем установки файловой переменной. Посмотрите прекрасный ручной раздел 57.3.4 Локальные переменные в Файлах, чтобы изучить, как сделать это.

9
ответ дан 07.12.2019, 13:54
  • 1
    Потрясающий, точно вид ответа я надеялся на!Спасибо! – Vebjorn Ljosa 17.09.2009, 16:52

"Сам" Emacs не должен смешивать с BOM; если бы это действительно делает это, то это должен был бы быть код, реализовав Emacs "режим", Вы - useing для редактирования XML-файлов, который удаляет BOM. Так как Вы не говорите, какой то есть, я могу только отослать Вас к документации для того режима, или что Вы открываете файлы в fundamental-mode (или подобный неразрушающий режим). Или попробуйте M-x find-file-literally если все остальное перестало работать.

1
ответ дан 07.12.2019, 13:54

Продолжение на ответе Richard Hoskins: если Вы никогда не хотите, чтобы BOM был скрыт emacs, можно отключить *-with-signature кодирования с этим отрывком:

(setq auto-coding-regexp-alist
  (delete (rassoc 'utf-16be-with-signature auto-coding-regexp-alist)
  (delete (rassoc 'utf-16le-with-signature auto-coding-regexp-alist)
  (delete (rassoc 'utf-8-with-signature auto-coding-regexp-alist)
          auto-coding-regexp-alist))))

BOM является U+FEFF, “нулевой шириной неразрывное пространство”, и не обнаруживается как поле в моем emacs 23.1.1 — вместо этого, верхняя строка файла переместилась немного вниз, и поле иногда появляется вокруг первой строки — но Вы видите, что BOM там, и удаляет его при необходимости.

5
ответ дан 07.12.2019, 13:54

Теги

Похожие вопросы