使 emacs 不从 XML 文件中删除 BOM

Veb*_*osa 8 xml emacs

我使用 Emacs 来编辑另一个应用程序读取的 XML 文件。另一个应用程序要求文件以字节顺序标记 (BOM) 开头。但是,每次我编辑文件时,Emacs 似乎都会删除 BOM。有没有办法让 Emacs 不理会 BOM?

Ric*_*ins 10

Emacs 是否会编写 BOM 取决于它使用的编码系统。Emacs 会在访问文件时自动选择它使用的编码系统。

您可以将编码系统更改为 utf-8-with-signature,这将告诉 Emacs 编写 BOM。

要更改访问文件的编码系统:

C-x RET r utf-8-with-signature RET
Run Code Online (Sandbox Code Playgroud)

您可以通过设置文件变量来设置 Emacs 用于特定文件的编码系统。请参阅详细手册部分57.3.4 文件中的局部变量以了解如何执行此操作。


小智 6

理查德霍斯金斯的回答的后续:如果您从不希望 emacs 隐藏 BOM,您可以使用以下代码段禁用 *-with-signature 编码:

(setq auto-coding-regexp-alist
  (delete (rassoc 'utf-16be-with-signature auto-coding-regexp-alist)
  (delete (rassoc 'utf-16le-with-signature auto-coding-regexp-alist)
  (delete (rassoc 'utf-8-with-signature auto-coding-regexp-alist)
          auto-coding-regexp-alist))))
Run Code Online (Sandbox Code Playgroud)

BOM 是 U+FEFF,即“零宽度不间断空间”,并且在我的 emacs 23.1.1 中没有显示为一个框 - 相反,文件的顶行稍微向下移动,有时会显示一个框出现在第一行周围——但您可以看到 BOM 在那里,如有必要,将其删除。