我的Emacs和R环境有这个奇怪的编码问题。除了输入的回声之外,我的.Rprofile设置Sys.setlocale("LC_ALL","zh_CN.utf-8");
显示中文字符都很好。
> linkTexts[5]
font
"使用帮助"
> functionNotExist()
错误: 没有"functionNotExist"这个函数
> fire <- "你好"
> fire
[1] " "
正如我们所看到的,向量linkTexts
中包含的中文字符,中文错误消息和输入中文字符都可以完美显示,但输入字符的回显仅显示为空白占位符。
sessionInfo()
就在这里,这符合Sys.setlocale("LC_ALL","zh_CN.utf-8");
设置的预期:
> sessionInfo()
R version 2.15.2 (2012-10-26)
Platform: i386-apple-darwin9.8.0/i386 (32-bit)
locale:
[1] zh_CN.utf-8/zh_CN.utf-8/zh_CN.utf-8/C/zh_CN.utf-8/C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] XML_3.96-1.1
loaded via a namespace (and not attached):
[1] compiler_2.15.2 tools_2.15.2
我在.Emacs文件中没有区域设置。
对我来说,这似乎是一个Emacs编码问题,但我只是不知道如何纠正它。有什么想法或建议吗?感谢。
答案 0 :(得分:1)
您的示例开箱即用。您可以使用 M-x set-buffer-process-coding-system
设置emacs进程解码/编码。一旦你弄清楚什么编码有效(如果有的话),你可以使用以下方法永久改变:
(add-hook 'ess-R-post-run-hook
(lambda () (set-buffer-process-coding-system
'utf-8-unix 'utf-8-unix)))
将utf-8-unix
替换为您选择的编码。
我不太相信上述内容会有所帮助。您的示例中的LinkText显示效果很好,但是火不显示,看起来不像emacs / ESS问题。
答案 1 :(得分:1)
VitoshKa提出了完全正确的建议。我只想在这里添加更多自己的发现,因为人们可能遇到不同但相似的特殊性格问题。然而,它们可以用同样的方式解决。
根本原因是当前缓冲区进程的输入编码设置。如M-x describe-current-coding-system
命令所示,默认缓冲区进程编码设置适用于输出(utf-8-unix
)但输入恶化:
Coding systems for process I/O:
encoding input to the process: 1 -- iso-latin-1-unix (alias: iso-8859-1-unix latin-1-unix)
decoding output from the process: U -- utf-8-unix (alias: mule-utf-8-unix)
将输入的编码系统更改为utf-8-unix
,或者通过'Mx set-buffer-process-coding-system'或将ess-post-run-hook
添加到.emacs
,如同VitoshKa建议的那样,足以解决汉字显示问题。
由于此设置,人们可能遇到的另一个问题是ESS中的特殊字符。尝试输入特殊字符时,您可能会收到英文错误消息错误: 句法分析器%d行里不能有多字节字符
或invalid multibyte character in parser at line %d
。
> x <- data.frame(part = c("målløs", "ny"))
错误: 句法分析器1行里不能有多字节字符
对于缓冲进程的输入编码系统的正确utf-8-unix
设置,特殊字符的上述错误消失。