emacs自动选择编码

今天解决了一个困扰了许久的问题,那就是emacs的文件编码问题,个人一直以来都是默认使用utf-8来编辑文件,但是总会遇到别的同事使用gbk来编码,导致查看别人写的代码时显示乱码,之前遇到这种问题,一般都是 C-x ret r revert编码成gbk,很不方便。

还有一段时间是直接(set-language-environment "Chinese-GB18030")设置编码环境到gbk ,这样看别人的文件是没问题了,但是自己的文件也变成gbk了,更糟糕的是,一些输出会变成乱码,比如 mu4e-view模式下转换邮件到浏览器查看,就会变成乱码。

目前找到的解决办法 设置emacs 的prefer-coding-system

;; set coding config, last is highest priority.
;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Recognize-Coding.html#Recognize-Coding
(prefer-coding-system 'cp950)
(prefer-coding-system 'gb2312)
(prefer-coding-system 'cp936)
(prefer-coding-system 'gb18030)
(prefer-coding-system 'utf-16)
(prefer-coding-system 'utf-8-dos)
(prefer-coding-system 'utf-8-unix)

这样emacs会按照顺序优先编码,需要注意的是,放在最后的会被最优先选择。上面的设置就是最优先选择utf-8-unix

这样设置在一些场景下还有一些不够智能,比如magit 看 log信息,会出现 log现实中文正常,进入查看修改内容如果遇到中文会变成乱码

进入查看修改内容,出现乱码

有更好的解决办法,欢迎交流

3 个赞

我觉得应该在源头上解决问题,项目中统一使用 EditorConfig

1 个赞

比vscode好多啦,有时看日本人的shift-jis或者湾湾的big5编码,vscode还是傻傻地用utf8打开,然后切换编码的时候

正确编码(根据文本内容猜测)

您都猜对了,就不能顺便给我安排一下?

3 个赞

这个需要在一定范围内全部推行和规范,有时候这个目的并不是那么容易达到吧,

这东西放在你们的项目中,支持的编辑器会自动给你处理编码等东西。不需要你“号召”,这种东西只有自动化工具才行,靠人工是不行的。

关键看他们老板。

有些leader会有很奇怪的偏执

上面的配置真的挺好用的,之前我的一个a.org文件从windows下拷贝到macos下后出现了乱码, 按照上面的方法,我修改了macos下的emacs的配置,重新打开文件后显示就正常了。 谢谢楼主!!!

好用!谢谢楼主!

可以尝试下http://www.emacswiki.org/emacs/Unicad中的unicad.el插件