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

标签 emacs encoding

我有一个 xml 文件。当我用 Emacs 打开它时,它显示中文字符(见附件)。这发生在我装有 Emacs 和记事本的 Windows 7 PC 以及我的 Windows XP 上(见图 A)。图B是A的hexl-mode。

enter image description here

如果我用同事的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/

相关文章:

Emacs Lisp : How to, 与 REPL 的交互式缓冲区?

encoding - 这是什么类型的编码?我听说它是​​ Bencode,但它看起来并不标准

oracle - Spark JDBC 中的编码选项

php - 使用编码为 UTF-8 的 PDFTk 填充的 pdf 中缺少字符

emacs - 如何绑定(bind)到 s-up?

git - Emacs 可以忽略 git 存储文件的时间戳变化吗?

emacs - 无法隐藏 Emacs 中的欢迎屏幕

emacs - 如何默认启用自动拼写检查?

C# 将 REST 调用的响应写入文本文件

java - 在 Java 中将字符串转换为 UTF-16 表示形式