Trong thử nghiệm của tôi, chỉnh sửa một UTF-8
tệp không thay đổi mã hóa và BOM vẫn ( efbb bf
). (chế độ nxml)
Chà, điều này có thể khác nhau giữa xml-mode
và nxml-mode
, hoặc phiên bản của emacs (24 so với 26). Nó nói chế độ ở phía dưới.
Nếu bạn chỉnh sửa một Emacs một tệp XML được mã hóa bằng unicode ( UTF-16
endian nhỏ), nó sẽ thay đổi mã hóa thành UTF-16
endian lớn. Có lẽ đó là những gì anh ấy đang nói.
Nhưng BOM vẫn ở đó, được thay đổi từ fffe
thành ffef
và null nằm trên byte lẻ thay vì byte chẵn. Bạn có thể thấy nó trong chế độ hexl.
Tệp xml mẫu. Thuộc tính mã hóa chỉ đạo mã hóa khi emacs lưu nó ở chế độ xml hoặc chế độ nxml. Một phiên bản trong tương lai sẽ được vá để kiểm tra BOM trước.
<?xml version="1.0" encoding="UTF-16"?>
<hi />
Có vẻ như Emacs lấy UTF-16
như UTF-16BE
, trong khi Windows lấy nó làm UTF-16LE
(BE và LE không hoạt động trong Emacs cho thuộc tính mã hóa). Thuộc tính mã hóa có lẽ là chìa khóa cho các vấn đề ở đây.
Lưu nó trong powershell sẽ chuyển đổi nó trở lại utf-16le.
[xml]$xml = get-content test.xml; $xml.save('test.xml')
Với mã hóa = "UTF-16LE" và mã hóa = "UTF-16BE", quả bom được loại bỏ, làm cho tệp không thể nhận ra trong emacs. Đây là một lỗi đã được xác nhận sẽ được vá: http://lists.gnu.org/archive/html/orms-gnu-emacs/2019-05/msg00892.html