Nel mio test, la modifica di un UTF-8
file non cambia la codifica e la distinta base rimane ( efbb bf
). (nxml-mode)
Bene, questo può variare tra xml-mode
e nxml-mode
, o la versione di emacs (24 vs 26). Dice la modalità in basso.
Se modificate un Emacs un file XML codificato in unicode ( UTF-16
little endian), cambierà la codifica in UTF-16
big endian. Forse è di questo che parla.
Ma la BOM è ancora lì, modificata da fffe
a ffef
, e i valori null si trovano sul byte dispari anziché sul byte pari. Puoi vederlo in modalità hexl.
File XML di esempio. L'attributo encoding dirige la codifica quando emacs la salva in modalità xml o nxml. Una versione futura verrà modificata per verificare prima la DBA.
<?xml version="1.0" encoding="UTF-16"?>
<hi />
Sembra che Emacs prenda UTF-16
come UTF-16BE
, mentre Windows lo considera come UTF-16LE
(BE e LE non funzionano in Emacs per l'attributo di codifica). L'attributo di codifica è probabilmente la chiave per i problemi qui.
Salvandolo in PowerShell lo convertirà nuovamente in utf-16le.
[xml]$xml = get-content test.xml; $xml.save('test.xml')
Con encoding = "UTF-16LE" e encoding = "UTF-16BE", il bom viene rimosso, rendendo il file irriconoscibile in emacs. Questo è un bug confermato che verrà corretto: http://lists.gnu.org/archive/html/bug-gnu-emacs/2019-05/msg00892.html