如果我打开xml文件,Emacs会显示中文字符

gio*_*ano 3 emacs encoding

我有一个xml文件.当我用Emacs打开它时,它会显示中文字符(参见附件).这种情况发生在带有Emacs和Notepad的Wi​​ndows 7 PC上以及我的Windows XP上(见图A).图B是A的hexl模式.

在此输入图像描述

如果我使用同事的Windows XP PC并用记事本打开文件,则没有中文字符,但有一个奇怪的字符.我把它保存为txt文件并通过电子邮件发送到我的Windows7-PC(见图C).奇怪的角色被"?"取代.(由于限制,我无法使用我的同事的PC并使用奇怪的角色重现记事本文件).

我的问题:似乎XML文件中的字符会产生问题.我不知道如何应对.有人知道如何解决这个问题吗?它与编码有关吗?谢谢你的提示.

leg*_*cia 6

通过图B,看起来这个文件是用big-endian和little-endian UTF-16混合编码的.它fe ff以big-endian UTF-16的字节顺序标记开头,而XML声明(<?xml version=...)也是big-endian,但开头的部分<report是little-endian.你可以知道,因为字母出现在hexl显示的第一部分的偶数位置,但是在更低的奇数位置.

此外,之前有一个空字符(编码为两个字节00 00)<report.XML文档中不允许使用空字符.

但是,由于某些XML元素在图A中正确显示,因此似乎混淆了整个文件.该文件已损坏,可能需要手动解决.

如果文件中没有非ASCII字符,我会尝试在Emacs中打开文件作为二进制(M-x revert-buffer-with-coding-system并指定binary),删除所有空字节(M-% C-q C-@ RET RET),保存文件并希望最好.

另一种可能的解决方案是将每个区域标记为中文字符并重新编码M-x recode-region,将"Text was really in" utf-16-le和"但被解释为"as utf-16-be.