У моєму тесті редагування UTF-8
файлу не змінює кодування, і BOM залишається ( efbb bf
). (nxml-режим)
Ну, це може відрізнятися між xml-mode
та nxml-mode
або версією emacs (24 проти 26). Він говорить про режим знизу.
Якщо ви відредагуєте Emacs XML-файл, закодований у unicode ( UTF-16
маленький ендіан), він змінить кодування на UTF-16
великий endian. Можливо, саме про це він і говорить.
Але BOM все ще є, змінився з fffe
на ffef
, і нулі знаходяться на непарному байті, а не парному байті. Ви можете бачити це в hexl-режимі.
Зразок XML-файлу. Атрибут кодування спрямовує кодування, коли emacs зберігає його в xml-режимі або nxml-режимі. Майбутня версія буде виправлена, щоб спочатку перевірити BOM.
<?xml version="1.0" encoding="UTF-16"?>
<hi />
Схоже, Emacs приймає UTF-16
як UTF-16BE
, а Windows приймає це як UTF-16LE
(BE і LE не працюють в Emacs для атрибута кодування). Атрибут кодування, ймовірно, є ключовим для тут проблем.
Збереження його в shellhell перетворить його на utf-16le.
[xml]$xml = get-content test.xml; $xml.save('test.xml')
З encoding = "UTF-16LE" та encoding = "UTF-16BE", бома видаляється, що робить файл невпізнанним у emacs. Це підтверджена помилка, яку буде виправлено: http://lists.gnu.org/archive/html/bug-gnu-emacs/2019-05/msg00892.html