emacs中各种类型的'utf-8'之间的区别是什么?

时间:2013-07-25 15:48:25

标签: emacs unicode encoding

在Emacs中,输入

M-x revert-buffer-with-coding-system

我可以看到很多类型的'utf-8',例如 utf-8 utf-8-auto-unix utf-8 -emacs-unix 等等。

我想知道它们之间有什么区别。

我用谷歌搜索了他们但找不到合适的答案。

P.S。

我问这个问题是因为几个月前我遇到了编码问题。我在Emacs和我的〜/ .emacs 中编写了一个php程序,我设置了

(prefer-coding-system 'utf-8)

但是在浏览器中浏览php页面时,我发现由于编码问题导致浏览器无法正确显示内容,即使我已写过

<meta name="Content-Type" content="text/html; charset=UTF-8" />

在页面中。

但是在使用 notepad ++ 将文件存储在utf-8中后,浏览器可以正确显示内容。

所以我想了解更多有关Emacs编码的信息。

2 个答案:

答案 0 :(得分:13)

编码名称的最后一部分(例如mac中的utf-8-mac)通常用于描述将在行末尾使用的特殊字符:< / p>

  • -macCR,MacOS的标准行分隔符(直到OS X)
  • -unixLF unice系统的标准分隔符(所以基于BSD的Mac OS X)
  • -dosCR+LF DOS / Windows的分隔符

一些额外的编码参数包括:

  • -emacs:支持对所有Emacs字符(包括非Unicode)进行编码
  • -with-signature:强制使用BOM(见下文)
  • -auto:自动检测BOM

您可以结合使用不同的可能性,使列表显示在Emacs中。

要获得有关编码提供的行结尾类型,BOM和字符集的信息,您可以使用describe-coding-system或: Ch C

关于BOM:

  • utf标准定义了一个特殊的签名,放在(文本)文件的开头,以区分utf-16编码的字节顺序(因为utf-16存储的字符为2)字节 - 或16位)或字节序:一些系统将最高有效字节放在第一位(big-endian - &gt; utf-16be),其他一些系统将最低有效字节放在第一位(little-endian - &gt; utf-16le )。该签名称为 BOM 字节顺序标记

  • utf-8中的
  • ,每个字符由一个字节表示(对于大于127的扩展字符,它们使用特殊的字节序列除外),因此指定字节顺序是一个废话,但这个签名无论如何都有用于检测utf-8文件而不是纯文本ascii。 utf-8文件与ascii文件的区别仅在于扩展字符,如果没有解析整个文件直到找到伪文件使其立即可见时才能检测到。 (BTW Emacs非常有效地进行这种自动检测)

  • 仅供参考,BOM是以下字节作为文件的第一个字节:

    • utf-16le:FF FE
    • utf-16be:FE FF
    • utf-8:EF BB BF
  • 您可以要求Emacs打开一个文件而不使用find-file-literally进行任何转换:如果第一行以开头,您会看到未解码的utf-8 BOM

正如@wvxvw所说,您的问题是文件开头可能缺少BOM,导致错误地解释和呈现。 BTW,M-x hexl-mode也是检查文件原始内容的非常方便的工具。感谢您指向我(我经常使用外部十六进制编辑器,而它可以直接在Emacs中完成)

答案 1 :(得分:2)

除了在设置

之后,不能多说这个问题
(prefer-coding-system 'utf-8)
(setq coding-system-for-read 'utf-8)
(setq coding-system-for-write 'utf-8)

我2年多没有任何unicode问题了。