设置 Emacs 文件系统的编码格式
文章目录
重装系统后,Emacs 打开以前的文件,都显示为乱码,着实吓了我一跳。这个时候千万不要慌张,也不要随便地保存乱码的文件。
其实这只是 Emacs 读取文件的编码格式与你的文件格式不一样。我们可以用 M-x describe-coding-system 这个命令来查看一下 Emacs 是用什么编码来读取当前文件的。
比如说我的 org 文件都是用 UTF-8 来保存的,而打开某个 org 文件显示乱码,用命令 M-x describe-coding-system 显示当前解读的编码为:
1 -- iso-latin-1-unix (alias: iso-8859-1-unix latin-1-unix)
Emacs 错把 UTF-8 的编码解读成了 latin 编码格式,难怪会乱码!
这个时候,有两种解决办法。
- 把 Emacs 的默认编码设置为 UTF-8。 在 .emacs 文件里放入下面这段代码:
<pre><span>;;</span>
<span>set the default text coding system
(setq default-buffer-file-coding-system ‘utf-8)
可是即使我加了上面这条语句,为什么 Emacs 依然显示 org 文件为乱码呢?
原来上面这一行,只是适用于写文件的情况。当你读取一个文件的时候,可能依然会显示出乱码,因为 Emacs 读文件也是按照一定的编码规律来解读文件的。我们再用命令 M-x describe-coding-system 仔细观察一下结果里面的内容,是不是有类似下面这样一段:
<pre>Priority order for recognizing coding systems when reading files:
1. iso-latin-1 (alias: iso-8859-1 latin-1)
2. utf-8 (alias: mule-utf-8)
3. iso-2022-7bit
4. iso-2022-7bit-lock (alias: iso-2022-int-1)
5. iso-2022-8bit-ss2
6. emacs-mule
7. raw-text
8. iso-2022-jp (alias: junet)
9. in-is13194-devanagari (alias: devanagari)
10. chinese-iso-8bit (alias: cn-gb-2312 euc-china euc-cn cn-gb gb2312)
11. utf-8-auto
12. utf-8-with-signature
13. utf-16
14. utf-16be-with-signature (alias: utf-16-be)
15. utf-16le-with-signature (alias: utf-16-le)
16. utf-16be
17. utf-16le
18. japanese-shift-jis (alias: shift_jis sjis cp932)
19. undecided
这就是 Emacs 在读文件时候的解码顺序!如果你的文件是以英文开头,自然会套用第一种方法。这个时候,我们还需要[调整一下这个编码的先后次序](http://www.gnu.org/software/emacs/manual/html_node/emacs/Recognize-Coding.html)。用命令 M-x prefer-coding-system 就可以调整这些顺序。调整完顺序,再打开 org 文件看一看,终于恢复原貌了。
如果你只是用命令 M-x prefer-coding-system 来设置,下次重启 Emacs 的时候,这个设置就会自动清除。如果需要每次都采用这个设置,可以把下面这行扔到 .emacs 里指定优先用 utf-8 来解码:
<pre>(prefer-coding-system 'utf-8)
- 另外一种解决乱码的办法,就是用命令 C-x
r ( M-x revert-buffer-with-coding-system) 来用指定的编码重新读入这个文件。
另外,碰到文件编码混乱的时候,最重要的一点,看到乱码的文件,不要随便保存。有关 Emacs 编码格式的详情可以看看官方文档。
原创文章,如转载请注明:转载自细节之锤 [ http://blog.WaterLin.org/ ]
Copyright © WaterLin.org. All rights reserved.
文章作者 cookwhy
上次更新 2009-11-06