8

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

3 ответа3

9

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

Вы можете изменить систему кодирования на utf-8-with-signature, которая скажет Emacs написать спецификацию.

Чтобы изменить систему кодирования посещаемого файла, `Cx RET r utf-8-with-signature RET '.

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

5

Продолжение ответа Ричарда Хоскинса: если вы никогда не хотите, чтобы спецификация была скрыта 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))))

Спецификация - это U+FEFF, «неразрывный пробел нулевой ширины», и она не отображается как поле в моем emacs 23.1.1 - вместо этого верхняя строка файла перемещается немного вниз, а иногда поле появляется вокруг первой строки - но вы можете видеть, что спецификация есть, и удалить ее, если это необходимо.

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .