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-modeund nxml-modeoder 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-16Little Endian) codiert ist , wird die Codierung in UTF-16Big Endian geändert . Vielleicht ist es das, worüber er spricht.
Aber die Stückliste ist immer noch da, geändert von fffezu 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-16als 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