Dans mon test, l'édition d'un UTF-8fichier ne change pas l'encodage et la nomenclature reste ( efbb bf). (mode nxml)
Eh bien, cela peut varier entre xml-modeet nxml-modeou la version d'emacs (24 vs 26). Il indique le mode en bas.
Si vous modifiez un Emacs un fichier XML encodé en unicode ( UTF-16petit endian), il changera l'encodage en UTF-16big endian. C'est peut-être de cela qu'il parle.
Mais la nomenclature est toujours là, changée de fffeen ffef, et les valeurs nulles sont sur l'octet impair au lieu de l'octet pair. Vous pouvez le voir en mode hexl.
Exemple de fichier xml. L'attribut encoding dirige l'encodage quand emacs l'enregistre en mode xml ou en mode nxml. Une future version sera corrigée pour vérifier d'abord la nomenclature.
<?xml version="1.0" encoding="UTF-16"?>
<hi />
Il ressemble à Emacs prend UTF-16comme UTF-16BE, tandis que Windows le prend comme UTF-16LE(BE et LE ne fonctionnent pas dans Emacs pour l'attribut de codage). L'attribut de codage est probablement la clé des problèmes ici.
L'enregistrer dans powershell le reconvertira en utf-16le.
[xml]$xml = get-content test.xml; $xml.save('test.xml')
Avec encoding = "UTF-16LE" et encoding = "UTF-16BE", la nomenclature est supprimée, rendant le fichier méconnaissable dans emacs. Il s'agit d'un bogue confirmé qui sera corrigé: http://lists.gnu.org/archive/html/bug-gnu-emacs/2019-05/msg00892.html