2013-04-26 3 views
1

Emacs 및 R 환경에 이상한 인코딩 문제가 있습니다. 한. 자의 표시는 입력. 자의 반향을 제외하고 내 .Rprofile 설정 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 인코딩 문제인 것처럼 보이지만, 어떻게 수정해야 할 지 모르겠습니다. 어떤 생각이나 제안? 감사.

+0

일반적으로 교차 게시에는 무례한 것으로 간주됩니다. 이 이메일이 여기에 게시 된 것과 동시에 R 도움말 목록을 통해 왔음을 알았습니다. –

+0

@TylerRinker, 나는 원래 R 도움말 목록 및 Stackoverflow의 참가자가 거의 겹치지 않을 수 있으며 둘 다 도움이 될 수 있다고 생각했기 때문에 그 일을하는 것을 유감스럽게 생각합니다. 다시는 그렇게하지 않을 것입니다. : D – lcn

답변

1

귀하의 예가 나와 함께 사용할 수 있습니다. 이맥스 프로세스 디코딩/인코딩을 M-xset-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는 잘 표시되지만 불은 보이지 않지만 이맥스/ESS 문제처럼 보이지 않습니다.

+0

고마워, @ 비토 샤,이게 내가 필요한거야! – lcn

+0

다른 답변에서 추가 한 것처럼 화재 변수의 문제는 버퍼 프로세스의 입력 코딩 설정으로 인해 발생했습니다. LinkText의 한자 문자열은 XML 파싱으로 만들어 졌으므로 모든 것이 OK였습니다. – lcn

+0

많은 감사합니다! 또한 러시아어 용 Windows Emacs + ESS + R에서 작동합니다. utf-8-unix 대신 cp1251을 설정하십시오. 그 후에 파일 이름 그래픽 타이틀 등은 정확하게 보여줄 것입니다! 감사! – crow16384

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.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 설정에

는 특수 문자에 대한 위의 오류가 사라집니다.