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