2013-04-26 22 views
1

我對Emacs和R環境有這個奇怪的編碼問題。中文字符的顯示都非常好,除了輸入字符的回顯外,我的.R配置文件設置Sys.setlocale("LC_ALL","zh_CN.utf-8");輸入中文字符在ESS中沒有正確回顯

> 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

交叉帖子通常被認爲是粗魯的。我看到這封電子郵件是通過R幫助列表同時發佈的。 – 2013-04-26 05:28:23

+0

@TylerRinker,我很抱歉這麼做,因爲我最初認爲R幫助列表和Stackoverflow的參與者可能沒有多少重疊,並且在他們兩人的發帖都可以提供幫助。我永遠不會再這樣做。 :D – lcn 2013-04-28 21:05:48

回答

1

您的示例適合我開箱即用。您可以使用M-xset-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問題。

+0

謝謝,@VitoshKa,這正是我需要的! – lcn 2013-04-26 16:41:14

+0

就像我在另一個答案中添加的那樣,火災變量的問題是由緩衝過程的輸入編碼設置引起的。 LinkText中的中文字符字符串是從XML解析中創建的,所以一切正常。 – lcn 2013-04-26 17:17:34

+0

非常感謝!也適用於俄語的Windows Emacs + ESS + R。只需設置cp1251而不是utf-8-unix。之後,文件名稱圖形標題等將被正確顯示!謝謝! – crow16384 2015-04-10 06:10:20

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設置緩衝 - 工序 - 編碼系統'或者像那樣將ess-post-run-hook添加到如VitoshKa所建議的那樣,就足以解決漢字顯示問題。

由於此設置,人們可能遇到的另一個問題是ESS中的特殊字符。嘗試輸入特殊字符時,可能會收到英文錯誤消息錯誤: 句法分析器%d行裏不能有多字節字符 invalid multibyte character in parser at line %d

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

並用正確的utf-8-unix設置用於輸入編碼緩衝過程的系統中,特殊字符上述錯誤消失。

相關問題