我使用 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 在那里,如有必要,将其删除。