2012-05-20 2 views
8

Windows 7 64 비트에서 R 2.15.0을 사용하고 있습니다. 유니 코드 (CJK) 텍스트를 파일로 출력하고 싶습니다.UTF-8 파일 출력 : R

다음 코드는 유니 코드 문자가 작동하지 않는 UTF-8 파일 연결을 작성하는 전송 방법을 보여줍니다 예상 (I) :

Read 1 item 
[1] "<U+5728>" 
:

rty <- file("test.txt",encoding="UTF-8") 
write("在", file=rty) 
close(rty) 
rty <- file("test.txt",encoding="UTF-8") 
scan(rty,what=character()) 
close(rty) 

스캔의 출력에 의해 같이

파일은 UTF 문자 자체로 작성된 것이 아니라 일부 종류의 ANSI 호환 대체 파일로 작성되었습니다. 처음으로 제대로 작동하도록 할 수 있습니까 (예 : 대신 "있음"이 포함 된 텍스트 파일 사용). 또는 코드 문자열을 대체하는 적절한 문자로 출력을 유니 코드로 변환하는 데 추가 마법을 사용할 수 있습니까?

감사합니다.

[자세한 정보 : Cygwin, R 2.14.2에서 은 올바르게으로 동작하고, Win7에서는 2.14.2도 깨졌습니다. 어딘가에 내 끝인가요?]

+0

[최신 업데이트] 문제는 인코딩보다는 * 로캘 *에있는 경향이 있습니다. 일시적으로 로케일을 "적절한"것으로 변경함으로써 횡설수설 한 출력 문제를 해결했습니다. 하나 이상의 로케일에있는 언어 데이터가있는 경우 하나님이 도와드립니다. – Patrick

+0

어쩌면이 [게시물] (http://stackoverflow.com/questions/11069908/r-extracting-clean-utf-8-text-from-a-web-page-scraped-with-rcurl?lq=1) 도움. – DJJ

답변

8

텍스트 파일에 UTF-8 문자열을 저장합니다 :

kLogFileName <- "parser.log" 
log <- function(msg="") { 
    con <- file(kLogFileName, "a") 
    tryCatch({ 
    cat(iconv(msg, to="UTF-8"), file=con, sep="\n") 
    }, 
    finally = { 
    close(con) 
    }) 
} 
+0

최근 R 버전에서이 기능이 중단 되었습니까? 이 방법으로 파일을 작성할 때 올바른 파일 내용을 얻으려면 readLines의 인코딩 매개 변수를 "ANSI"로 설정해야합니다. 예는 UTF-8 인코딩에서 "\ xe0"으로 나오지만, 작성된 파일의 readLines를 사용할 때 ANSI 인코딩에서 올바르게 나타납니다. – dimpol

+0

@dimpol - 결국이 방법이 효과가 있습니까? – Curious

+0

@Curious - 아니요, 메모장을 사용하여 수동으로 수행했습니다. ++.한 번에 하나의 데이터 세트에 들어있는 파일에 대해서만 한 번만 할 필요가 있었으며 총알을 물지 않고 수동으로 R 파일 인코딩을 계속하는 것이 더 빠릅니다. – dimpol

0

write이 생성되어 이라는 이름의 개체 이름이이되고 그러한 명명 된 개체를 빌드하지 않은 것 같아서 문제가 발생했다고 생각합니다. 대신 다음을 시도하십시오 :

txt <- "在" 
rty <- file("test.txt",encoding="UTF-8") 
write(txt, file=rty) 
close(rty) 
rty <- file("test.txt",encoding="UTF-8") 
inp <- scan(rty,what=character()) 
#Read 1 item 
close(rty) 
inp 
#[1] "在" 
+0

흠, 위의 최소 스 니펫에 영감을 얻은 원본 응용 프로그램이 사용 된 명명 된 객체입니다. 또한 위에서 제공 한 코드는 위와 같은 결과를 낳습니다. 아마도 원시 인코딩 문제가있을 수 있습니까? – Patrick

0

DB에서 오는 UTF-8 문자열과 관련된 문제가 있습니다.

파일을 올바르게 저장하는 유일한 방법은 파일을 이진 모드로 저장하는 것입니다.

F <- file(file.name, "wb") 
    tryCatch({ 
    writeBin(charToRaw(the_utf8_str), F) 
    }, 
    finally = { 
    close(F) 
    }) 
9

문제로 인해 일부 R-윈도우 특별 행동 (기본 시스템 코드를 사용하여/또는 일부 시스템 쓰기를 사용하여 함수, 사실을 모르지만 동작이 실제로 알려짐)

텍스트를 쓰려면 Windows에서 UTF8 인코딩을 사용하려면 함수 li에서 useBytes=T 옵션을 사용해야합니다 writeLines 또는 readLines :

txt <- "在" 
writeLines(txt, "test.txt", useBytes=T) 

readLines("test.txt", encoding="UTF-8") 
[1] "在" 
+0

감사합니다. 이것은 나를 위해 일했다. 거기에 많은 불완전한 충고가 있습니다. – Ruben