W moim teście edycja UTF-8
pliku nie zmienia kodowania, a BOM pozostaje ( efbb bf
). (tryb nxml)
No, może ulec zmianie między xml-mode
i nxml-mode
, lub wersja emacs (24 vs 26). Mówi tryb na dole.
Jeśli edytujesz plik XML Emacsa zakodowany w Unicode ( UTF-16
little endian), zmieni on kodowanie na UTF-16
big endian. Może o tym on mówi.
Ale BOM wciąż tam jest, zmieniony z fffe
na 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-16
jako 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