我有一个 xml 文件。当我用 Emacs 打开它时,它显示中文字符(见附件)。这发生在我装有 Emacs 和记事本的 Windows 7 PC 以及我的 Windows XP 上(见图 A)。图B是A的hexl-mode。
如果我用同事的Windows XP PC用记事本打开文件,没有汉字,只有一个奇怪的字符。我将其保存为 txt 文件并通过电子邮件将其发送到我的 Windows7-PC(见图 C)。奇怪的字符被替换为“?”。 (由于限制我无法使用我同事的PC 并复制带有奇怪字符的记事本文件)。
我的问题:似乎 XML 文件中的某些字符会产生问题。我不知道该如何应对。有人知道我该如何解决这个问题吗?它与编码有关吗?感谢提示。
最佳答案
根据图 B,该文件似乎是混合使用大端和小端 UTF-16 编码的。它以 fe ff
开头,这是big-endian UTF-16的字节顺序标记,XML声明(<?xml version=...
)也是big-endian,但以<report
开头的部分是小端。您可以分辨出来,因为字母出现在十六进制显示的第一部分的偶数位置,但在更下方的奇数位置。
此外,在 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
重新编码。 , 给“文本真的在”作为 utf-16-le
和“但被解释为”为utf-16-be
.
关于如果我打开 xml 文件,Emacs 会显示中文字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18311399/