在 Emacs 中,输入后
M-x revert-buffer-with-coding-system
我可以看到多种类型的“utf-8”,例如,utf-8、utf-8-auto-unix、utf-8 -emacs-unix等
我想知道它们之间有什么区别。
我用谷歌搜索过,但找不到正确的答案。
附注
我问这个问题是因为几个月前我遇到了编码问题。我在 Emacs 中编写了一个 php 程序,在我的 ~/.emacs 中,我设置了
(prefer-coding-system 'utf-8)
但是在浏览器中浏览php页面时,发现虽然我写了,但由于编码问题,浏览器无法正确显示内容
<meta name="Content-Type" content="text/html; charset=UTF-8" />
在页面中。
但是当我使用notepad++将文件存储为utf-8后,浏览器可以正确显示内容。
所以我想了解有关 Emacs 编码的更多信息。
最佳答案
编码名称的最后一部分(例如utf-8-mac
中的mac
)通常用于描述将在处使用的特殊字符>行尾:
-mac
:CR
,MacOS 的标准行分隔符(直到 OS X)-unix
:LF
unice 系统的标准分隔符(因此基于 BSD 的 Mac OS X)-dos
:CR+LF
DOS/Windows 的分隔符
一些额外的编码参数包括:
-emacs
:支持对所有 Emacs 字符(包括非 Unicode)进行编码-with-signature
:强制使用 BOM(见下文)-auto
:自动检测 BOM
您可以组合不同的可能性,从而使列表显示在 Emacs 中。
要获取有关编码提供的行结尾类型、BOM 和字符集的一些信息,您可以使用 describe-coding-system
,或:C-hC
关于 BOM:
utf 标准定义了一个特殊签名,放置在(文本)文件的开头,以区分
utf-16
编码字节的顺序(如 utf-16存储 2 个字节(或 16 位)或字节顺序的字符:某些系统将最高有效字节放在前面(大端 ->utf-16be
),而另一些则将最低有效字节放在前面(小端)字节序 ->utf-16le
)。该签名称为BOM:字节顺序标记在
utf-8
中,每个字符都由一个字节表示(大于 127 的扩展字符除外,它们使用特殊的字节序列),从而指定一个字节order 是无稽之谈,但这个签名无论如何对于检测 utf-8 文件而不是纯文本 ascii 很有用。 utf-8 文件与 ascii 文件的区别仅在于扩展字符,如果不解析整个文件,就不可能检测到这一点,直到找到一个伪 BOM 使其立即可见为止。 (顺便说一句,Emacs 进行此类自动检测非常高效)仅供引用,BOM 是作为文件的第一个字节的以下字节:
- utf-16le:
FF FE
- utf-16be:
FE FF
- utf-8:
EF BB BF
- utf-16le:
您可以使用
find-file-literally
要求 Emacs 打开一个文件而不进行任何转换:如果第一行以
开头,您会看到未解码的 utf-8 BOM在使用编码时需要一些额外的帮助,您可以引用 this complementary answer "How to see encodings in emacs"
正如 @wvxvw 所说,您的问题是文件开头可能缺少 BOM,导致文件被错误地解释和渲染。
顺便说一句,M-x hexl-mode
也是一个非常方便的工具来检查文件的原始内容。感谢您向我指出(我经常为此使用外部十六进制编辑器,而它可以直接在 Emacs 中完成)
关于emacs - emacs中各种类型的 'utf-8'有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17862846/