Stellen Sie sicher, dass Emacs die Stückliste nicht aus XML-Dateien entfernen

2457
Vebjorn Ljosa

Ich verwende Emacs, um eine XML-Datei zu bearbeiten, die auch von einer anderen Anwendung gelesen wird. Die andere Anwendung erfordert, dass die Datei mit einer Byte-Order-Markierung (BOM) beginnt. Allerdings scheint Emacs die Stückliste jedes Mal zu entfernen, wenn ich die Datei bearbeite. Gibt es eine Möglichkeit, Emacs dazu zu bringen, die Stückliste alleine zu lassen?

8

3 Antworten auf die Frage

9
Richard Hoskins

Emacs schreibt eine Stückliste oder nicht, je nachdem, welches Kodierungssystem verwendet wird. Emacs wählt automatisch das Kodierungssystem aus, das beim Besuch einer Datei verwendet wird.

Sie können das Kodiersystem in utf-8-with-signature ändern, wodurch Emacs angewiesen wird, die Stückliste zu schreiben.

Um das Kodierungssystem einer besuchten Datei zu ändern, wählen Sie "Cx RET r utf-8-with-signature RET".

Sie können das Kodierungssystem festlegen, das Emacs für eine bestimmte Datei verwendet, indem Sie eine Dateivariable festlegen . Informationen dazu finden Sie im Abschnitt 57.3.4 Lokale Variablen in Dateien .

Toll, genau die Antwort, auf die ich gehofft hatte! Vielen Dank! Vebjorn Ljosa vor 14 Jahren 0
5

Folgen Sie der Antwort von Richard Hoskins: Wenn Sie nicht möchten, dass die Stückliste von emacs ausgeblendet wird, können Sie die Codierung mit * ohne Signatur mit diesem Snippet deaktivieren:

(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)))) 

Die Stückliste ist U + FEFF, das "Null-Null-Leerzeichen", und wird in meinen Emacs 23.1.1 nicht als Box angezeigt. Stattdessen wurde die obere Zeile der Datei leicht nach unten verschoben und manchmal auch eine Box wird in der ersten Zeile angezeigt - Sie können jedoch sehen, dass die Stücklisten vorhanden sind, und diese ggf. löschen.

1
Teddy

Emacs "selbst" sollte sich nicht mit der Stückliste beschäftigen; Wenn dies wirklich der Fall ist, muss der Code den Emacs-Modus implementieren, den Sie zum Bearbeiten Ihrer XML-Dateien verwenden, wodurch die Stückliste entfernt wird. Da Sie nicht sagen, um welche es sich handelt, kann ich Sie nur auf die Dokumentation für diesen Modus verweisen oder dass Sie die Dateien im fundamental-mode(oder einem ähnlichen zerstörungsfreien Modus) öffnen . Oder versuchen Sie es, M-x find-file-literallywenn alles andere fehlschlägt.

Verwenden Sie den xml-Modus (dh sgml-mode), aber dieses Problem scheint an anderer Stelle zu liegen: Wenn ich die Datei mit `find-file-literally 'öffne und dann' Mx sgml-mode 'mache, wird die Stückliste nicht entfernt. Da Sonderzeichen beim buchstäblichen Besuch einer Datei nicht UTF-8-codiert sind, wäre es schön herauszufinden, wo in der zugrunde liegenden Format- und Zeichencode-Konvertierungscode die Stückliste entfernt wird. Vebjorn Ljosa vor 14 Jahren 0