W moim teście edycja UTF-8pliku nie zmienia kodowania, a BOM pozostaje ( efbb bf). (tryb nxml)
No, może ulec zmianie między xml-modei nxml-mode, lub wersja emacs (24 vs 26). Mówi tryb na dole.
Jeśli edytujesz plik XML Emacsa zakodowany w Unicode ( UTF-16little endian), zmieni on kodowanie na UTF-16big endian. Może o tym on mówi.
Ale BOM wciąż tam jest, zmieniony z fffena ffef, a wartości zerowe są na nieparzystym bajcie zamiast parzystym. Możesz to zobaczyć w trybie szesnastkowym.
Przykładowy plik XML. Atrybut kodowania kieruje kodowaniem, gdy emacs zapisuje je w trybie xml lub nxml. Przyszła wersja zostanie załatana, aby najpierw sprawdzić BOM.
<?xml version="1.0" encoding="UTF-16"?>
<hi />
Wygląda na to, że Emacs przyjmuje UTF-16jako UTF-16BE, podczas gdy Windows przyjmuje to jako UTF-16LE(BE i LE nie działają w Emacsie dla atrybutu kodowania). Atrybut kodowania jest prawdopodobnie kluczem do problemów tutaj.
Zapisanie go w PowerShell spowoduje konwersję z powrotem do utf-16le.
[xml]$xml = get-content test.xml; $xml.save('test.xml')
Przy kodowaniu = „UTF-16LE” i kodowaniu = „UTF-16BE” bom jest usuwany, co powoduje, że plik nie jest rozpoznawany w emacsie. To jest potwierdzony błąd, który zostanie załatany: http://lists.gnu.org/archive/html/bug-gnu-emacs/2019-05/msg00892.html