我有一个 xml 文件。当我用 Emacs 打开它时,它显示中文字符(见附件)。这种情况发生在我的带有 Emacs 和记事本的 Windows 7 PC 上以及我的 Windows XP 上(见图 A)。图 B 是 A 的 hexl 模式。
如果我使用同事的Windows XP电脑,用记事本打开该文件,没有中文字符,而是一个奇怪的字符。我将其保存为 txt 文件,并通过电子邮件将其发送到我的 Windows7-PC(见图 C)。奇怪的字符被替换为“?”。 (由于限制,我无法使用同事的电脑并重现带有奇怪字符的记事本文件)。
我的问题: XML 文件中似乎有一些字符会产生问题。我不知道如何应对。有人知道我该如何解决这个问题吗?和编码有关系吗?感谢您的提示。
从图 B 可以看出,该文件是使用大端和小端 UTF-16 混合编码的。它开始于fe ff
,这是大端 UTF-16 的字节顺序标记,以及 XML 声明 (<?xml version=...
) 也是大尾数,但是以<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
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)