最近又研究了下 Emacs 在 Windows平台 下的编码问题。
为了使不同平台共享方便,我要统一使用 UTF-8 编码。只在 early-init.el
中加入下面的代码:
(set-charset-priority 'unicode)
(prefer-coding-system 'utf-8)
(setq system-time-locale "C")
上面的设置可以解决的问题:
- 解决 Haskell-mode 的 REPL 无法启动,或者
putStrLn
没法在 REPL 打印中文的问题。 - 新建文件时默认使用的是 UTF-8 编码,而不是 GBK 编码
- 保存 Buffer 时不会经常提示选择编码
但也产生了新的问题:
-
M-x run-python 中没法通过 print 打印中文,因为 python 默认使用的不是 UTF-8 编码。可以在参数中加入
-X utf-8
,或者设置环境变量 PYTHONIOENCODING 的值为 utf-8, 就可以解决。(setq python-shell-interpreter-args "-i -X utf-8") ;; 或者在系统中创建,或者在 Emacs 中设置下面的环境变量 (setenv "PYTHONIOENCODING" "utf-8")
-
在右键菜单中设置 Open with Emacs (Emacsclient) 打开有中文名称的文件时,文件名会乱码。可以通过下面的设置解决
(when (eq system-type 'windows-nt)
(setq file-name-coding-system 'gbk))
- 默认输入法
default-input-method
人值由nil
变为了chinese-py-punct
。我个人不用C-\
切换输入法,这个对我没影响。
如果其他地方还有问题的话,可以单独进行设置编码。这也是 Emacs 维护者 Eli 比较推荐的方式。
比如 sdcv
这个本地翻译程序比较老,输出内容还是 GBK
编译的,可以用以下设置进行针对性更改。
(add-to-list 'process-coding-system-alist '("sdcv" . (utf-8-dos . chinese-gbk-dos)))
平时遇到编码问题可以通过 M-x escribe-current-coding-system
查看当前 Buffer 的编码设置情况。