1

我的 Emacs 和 R 环境遇到了这个奇怪的编码问题。Sys.setlocale("LC_ALL","zh_CN.utf-8");我的.Rprofile设置除了输入的回声外,汉字的显示都很好。

    > linkTexts[5]
          font 
    "使用帮助" 
    > functionNotExist()
    错误: 没有"functionNotExist"这个函数
    > fire <- "你好"
    > fire
    [1] "  "

可以看到,vector 中包含的汉字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 编码问题,但我只是不知道如何纠正它。有什么想法或建议吗?谢谢。

4

2 回答 2

1

你的例子对我来说是开箱即用的。您可以使用M-x set-buffer-process-coding-system. 一旦确定了哪种编码有效(如果有),您可以通过以下方式使更改永久生效:

(add-hook 'ess-R-post-run-hook
          (lambda () (set-buffer-process-coding-system
                      'utf-8-unix 'utf-8-unix)))

替换utf-8-unix为您选择的编码。

我不太相信上述内容会有所帮助。您的示例中的 LinkText 显示良好,但 fire 没有,看起来不像 emacs/ESS 问题。

于 2013-04-26T08:49:20.117 回答
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'或像VitoshKa建议的那样添加ess-post-run-hookin .emacs,就足以解决汉字显示问题。

由于此设置,人们可能遇到的另一个问题是 ESS 中的特殊字符。尝试输入特殊字符时,您可能会收到错误消息错误: 句法分析器%d行里不能有多字节字符 ,或invalid multibyte character in parser at line %d英文。

    > x <- data.frame(part = c("målløs", "ny"))
    错误: 句法分析器1行里不能有多字节字符

并且通过正确utf-8-unix设置缓冲进程的输入编码系统,上述特殊字符的错误就消失了。

于 2013-04-26T17:06:02.230 回答