要不你提供一下简单的示例代码以及你的操作流程以重现问题,Emacs 在Windows 上面会有各种各样玄学的问题.
@Samray 好的,如果是 R process, 只需要输入
a = '中文’
a
则会打印
[1] "\344\270\255\346\226\207"
如果是 python process, 输入
a = '中文’
则会报错,并显示
UnicodeEncodeError: ‘utf-8’ codec can’t encode characters in position 14-19: surrogates not allowed
但是这些在 terminal 里面都没有问题,感觉像是 emacs 的process 字符交换编码解码除了问题。但不知如何设置。 因此,我猜测Emacs在其他的编程语言中打印中文可能也会出现问题。
系统为 MacOS。
是的 所以windows上我对进程编码放弃中文显示,要用就用纯英文
不明白怎么重现?
~ $ emacs --version | head -1
GNU Emacs 25.3.1
~ $ python --version
Python 3.6.5
~ $ emacs -Q -nw -f run-python
要不试试这个:
;;;; 设置编辑环境
;; 设置为中文简体语言环境
(set-language-environment 'Chinese-GB)
如果还不行,可以试试这个:
;; 终端中文乱码
(set-terminal-coding-system 'utf-8)
(modify-coding-system-alist 'process "*" 'utf-8)
(setq default-process-coding-system '(utf-8 . utf-8))
这样可以重现,但i没有太值得意外的地方,Python 默认用 UTF-8,如果把下面的代码用 GBK 保存
a = '中文'
print(a)
Python 会报类似的错
~ $ cat foo.py | iconv --from-code gbk --to-code utf-8
a = '中文'
print(a)
~ $ python -c 'import sys; print(sys.getdefaultencoding())'
utf-8
~ $ python foo.py
File "foo.py", line 1
SyntaxError: Non-UTF-8 code starting with '\xd6' in file foo.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
~ $
所以你试试把 M-x run-python
的 Process 的 IO 编码改成 UTF-8 的,一个办法是用 C-x RET p
(set-buffer-process-coding-system
)
python 2跟3最重要的区别之一就是是否支持utf8
python 3,但是在终端里面可以,很奇怪
就是这么设置的,在终端里面可以显示,但是emacs里不行。set-buffer-process-coding-system 换了好几个也不可以。
要不截个图或者做个gif 来重现问题,现在似乎其他人都无法复现这个问题.
系統语言是简体中文嗎?
用 M-x revert-buffer-with-coding-system 转换一下试试看是那种编码.
对于R,可以看describe-coding-system出来的 Coding system for keyboard input: c – chinese-gbk-unix (alias: gbk-unix cp936-unix windows-936-unix)
(set-process-coding-system (get-buffer-process “R”) 'chinese-gb18030-dos 'chinese-gb18030-dos)
但是会有别的问题
不是,用的英文版。跟这个有关?
关系还挺大的,建议你换成中文重启一下试试。
实际上不一定要换系统语言,只要 locale 设置对了应该就没问题,不过设置 locale 最容易的办法还是改系统语言。
好的,我马上试试。谢谢
真的跟系统语言有关。有什么办法设置下吗?看惯了英文系统,切回来有点不习惯。
大概参照这个帖子,不过把 en_AU.UTF-8
换成对应的中文 locale 就行。应该是 UTF-8。
具体是哪个如果不清楚可以在改回英文以后通过从终端启动 Emacs 后用 getenv
测得。
然后最好把 macOS 系统语言的第二个设置成中文。
另外设置这个会影响 Emacs 内部显示日期和时间相关的功能,不过这些还是可以通过配置具体的环境变量控制的。