In meinem Test UTF-8
ändert das Bearbeiten einer Datei nichts an der Codierung und die Stückliste bleibt ( efbb bf
). (nxml-Modus)
Nun, dies kann zwischen xml-mode
und nxml-mode
oder der Version von Emacs variieren (24 vs 26). Es heißt der Modus unten.
Wenn Sie eine Emacs-XML-Datei bearbeiten, die in Unicode ( UTF-16
Little Endian) codiert ist , wird die Codierung in UTF-16
Big Endian geändert . Vielleicht ist es das, worüber er spricht.
Aber die Stückliste ist immer noch da, geändert von fffe
zu ffef
, und die Nullen befinden sich auf dem ungeraden Byte anstelle des geraden Bytes. Sie können es im Hexl-Modus sehen.
Beispiel-XML-Datei. Das Codierungsattribut steuert die Codierung, wenn Emacs sie im XML-Modus oder im XML-Modus speichert. Eine zukünftige Version wird gepatcht, um zuerst die Stückliste zu überprüfen.
<?xml version="1.0" encoding="UTF-16"?>
<hi />
Es sieht so aus, als würde Emacs UTF-16
als nehmen UTF-16BE
, während Windows es als nimmt UTF-16LE
(BE und LE funktionieren in Emacs nicht für das Codierungsattribut). Das Codierungsattribut ist wahrscheinlich der Schlüssel zu den Problemen hier.
Wenn Sie es in Powershell speichern, wird es wieder in utf-16le konvertiert.
[xml]$xml = get-content test.xml; $xml.save('test.xml')
Mit encoding = "UTF-16LE" und encoding = "UTF-16BE" wird die Bom entfernt, wodurch die Datei in Emacs nicht wiederzuerkennen ist. Dies ist ein bestätigter Fehler, der behoben wird: http://lists.gnu.org/archive/html/bug-gnu-emacs/2019-05/msg00892.html