Grey
全部学习内容汇总:GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used.
1845_emacs中一个中文乱码问题分析解决
曾经有一次放弃过我自己的emacs配置,一个原因就是中文的支持。感觉我的配置跟其他人的配置显得有些格格不入,而调整尝试并不顺利。这一次,类似的问题重现,不过针对目前的问题现象总归是得到了临时的解决。
问题的出现
我为了规划自己的读书进度,把一个文本的书籍切分成了片段。其实整个过程没有什么问题,习惯了各种功能使用emacs,我于是直接emacs打开了其中的一个拆分片段。后来发现,拆分片段乱码。我接着查看了原始文件,原始文件其实也是乱码。这的确是一个看着比较眼熟的问题,具体的状态如下:
问题分析与探索
出现这样的问题,基本上可以直接确认这个就是一个编码识别的问题。我先用其他的文本工具打开了文本看了一下,发现其实是没有问题的。而通过其他的工具看得出来,这个文件的编码是GB2312。这样,基本上就有一个大概的排查方向了。我印象中自己的确是从李杀的网站上抄了一些字体设置,而里面是有UTF-8的一些设置的。
为了做一个对比测试,我利用其他的工具直接进行了一个文件副本的转码。直接把副本文件转码成了UTF-8的格式进行了存储,之后再用我的emacs打开,效果如下:
直接搜索现在配置中的一些编码转换命令,暂时没有找到什么支持。我也找了一些其他的编码配置直接抄过来做测试,不过都失败了,而且引入了对齐的配置之后让我的页面变得有些凌乱。
对比性测试
spacemacs
我恢复了我一直使用的spacemacs的配置,测试了一下识别这个文件是没有问题的。这么看,至少可以确认应该是有解决方案的。
emacs
我好奇,接下来直接去掉了我所有的emacs配置直接使用一个默认emacs配置打开这个文件,发现依然是没有问题的。
这么看下来,其实就很有意思了。看起来,我遇到的这个问题或许是因为我自己的配置引入的。接下来的排查,从我加入的一系列的编码的配置方面寻找即可。
实际探索体验以及效果
通过简单的对比,找到了如下的代码导致了现在的效果:
;; UTF-8 as default encoding
(set-language-environment "UTF-8")
(set-default-coding-systems 'utf-8-unix)
(set-terminal-coding-system 'utf-8-unix)
去掉之后,不仅GB2312,UTF-8也是可以正常读取显示的。
小结
我知道现在的配置肯定还是有很多问题的,单纯的字体解析显示的配置可能也是很有改进空间的。但是,目前的配置至少是临时满足了我自己的需要的。在整个hack的过程中,其实我们在追求自己期待的功能的时候,一路上这样打怪获取的乐趣也是值得我们铭记的。
Happy hacking!