emacs 编码问题

1 篇文章 0 订阅
1 篇文章 0 订阅

【转自】

http://blog.waterlin.org/articles/set-emacs-default-coding-system.html

 

 

重装系统后,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 编码格式,难怪会乱码!

这个时候,有两种解决办法。

  1. 把 Emacs 的默认编码设置为 UTF-8。

    在 .emacs 文件里放入下面这段代码:

    ;;
                  set the default text coding system
    (setq default-buffer-file-coding-system 'utf-8)
    

    可是即使我加了上面这条语句,为什么 Emacs 依然显示 org 文件为乱码呢?

    原来上面这一行,只是适用于写文件的情况。当你读取一个文件的时候,可能依然会显示出乱码,因为 Emacs 读文件也是按照一定的编码规律来解读文件的。我们再用命令 M-x describe-coding-system 仔细观察一下结果里面的内容,是不是有类似下面这样一段:

      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 在读文件时候的解码顺序!如果你的文件是以英文开头,自然会套用第一种方法。这个时候,我们还需要调整一下这个编码的先后次序。用命令 M-x prefer-coding-system 就可以调整这些顺序。调整完顺序,再打开 org 文件看一看,终于恢复原貌了。

    如果你只是用命令 M-x prefer-coding-system 来设置,下次重启 Emacs 的时候,这个设置就会自动清除。如果需要每次都采用这个设置,可以把下面这行扔到 .emacs 里指定优先用 utf-8 来解码:

    (prefer-coding-system 'utf-8)
    
  2. 另外一种解决乱码的办法,就是用命令 C-x <RET> r ( M-x revert-buffer-with-coding-system) 来用指定的编码重新读入这个文件。

另外,碰到文件编码混乱的时候,最重要的一点,看到乱码的文件,不要随便保存。有关 Emacs 编码格式的详情可以看看官方文档

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值