Заставьте emacs не удалять спецификацию из файлов XML

2154
Vebjorn Ljosa

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

8

3 ответа на вопрос

9
Richard Hoskins

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

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

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

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

Круто, именно такой ответ, на который я надеялся! Спасибо! Vebjorn Ljosa 14 лет назад 0
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
Teddy

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

использовать xml-режим (т.е. sgml-mode), но эта проблема, похоже, в другом месте: если я открою файл с помощью `find-file-literally`, а затем выполню` Mx sgml-mode`, спецификация не будет удалена. Поскольку специальные символы не кодируются в UTF-8 при буквальном посещении файла, было бы неплохо выяснить, где в базовом преобразовании формата и коде преобразования кода символа удаляется спецификация. Vebjorn Ljosa 14 лет назад 0

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