问题描述

有一天闲着无事,把安装在Windows里的「方正新书宋」复制到Arch Linux里(我购买了这个字体的个人授权,这是合法使用)。

夭寿啦!Emacs的默认中文字体变成了方正新书宋。奇怪的是,如果我在启动后再eval那段字体配置文件,就一切正常了。

不论我怎么折腾,改fontconfig,Emacs的默认中文字体都是方正新书宋,Emacs的配置文件更是一改再改(可以看配置文件的修改记录)。对这个问题我是毫无头绪,欲哭无泪。

解决思路

折腾了快一天,突然想到,会不会是编码捣的鬼呢。在出问题的时候,用describ-char查看中文字符,得到了preferred charset: chinese-gbk (GBK Chinese simplified.),说明Emacs认为这个字符是gbk编码的,而如果把语言环境换成UTF-8:

1
(set-language-environment "UTF-8")

Update:

之前写错了,这里有两个长得差不多的函数 一个是set-language-environment,参数是编码;还有一个是set-locale-environment,接收的参数是类似zh_CN.UTF-8的locale-name。

字体配置就正常了。

思考

看来这Linux下同样需要配置UTF-8环境,否则就会出问题,怪不得Hick的指南里开头就是配置UTF-8环境啊[1]

但问题还没完。为什么Emacs会认为我的环境是GBK而不是UTF-8呢?我的locale关掉了gbk编码它还是这么认为。

未解之谜。如果你知道欢迎留言告诉我。谢谢。

Update:

我稍微深挖了一下,似乎在语言环境设置里面有一段代码把UTF-8「纠正」成了GBK,导致就算你用

1
(set-locale-environment "zh_CN.UTF-8")

也没法把环境变成UTF-8,得到的还是GBK。我猜测,可能Emacs认为UTF-8是不分什么zh_CNen_US的。


  1. Hick的Emacs中文化指南