En mi prueba, editar un UTF-8
archivo no cambia la codificación y la BOM permanece ( efbb bf
). (modo nxml)
Bueno, esto puede variar entre xml-mode
y nxml-mode
, o la versión de emacs (24 vs 26). Dice el modo en la parte inferior.
Si edita un Emacs un archivo XML codificado en unicode ( UTF-16
little endian), cambiará la codificación a UTF-16
big endian. Tal vez de eso está hablando.
Pero la lista de materiales sigue ahí, cambiada de fffe
a ffef
, y los valores nulos están en el byte impar en lugar del byte par. Puedes verlo en modo hexl.
Archivo xml de muestra. El atributo de codificación dirige la codificación cuando emacs la guarda en modo xml o modo nxml. Se parcheará una versión futura para verificar primero la lista de materiales.
<?xml version="1.0" encoding="UTF-16"?>
<hi />
Parece que Emacs toma UTF-16
como UTF-16BE
, mientras que Windows lo toma como UTF-16LE
(BE y LE no funcionan en Emacs para el atributo de codificación). El atributo de codificación es probablemente clave para los problemas aquí.
Guardarlo en powershell lo convertirá de nuevo a utf-16le.
[xml]$xml = get-content test.xml; $xml.save('test.xml')
Con encoding = "UTF-16LE" y encoding = "UTF-16BE", se elimina el bom, lo que hace que el archivo sea irreconocible en emacs. Este es un error confirmado que será parcheado: http://lists.gnu.org/archive/html/bug-gnu-emacs/2019-05/msg00892.html