2013-04-16 9 views
5

Utworzony poniżej skrypt do konwersji unicode na chińskie znaki, ostatni ciąg w temp.df[,"name_unicode"] to "§® £" (bez cudzysłowu), dzięki czemu osoby nie znające chińskiego również mogą pomóc.Konwersja i eksport Unicode w R

library(RODBC) 
library(Unicode) 

temp.df <- data.frame(name_unicode=c("&#38515;&#22823;&#25991;", 
            "&#38515;&#23567;&#25935;", 
            "&#38515;&#19968;&#23665;", 
            "&#167;&#174;&#163;"), 
         stringsAsFactors=FALSE) 

temp.df[,"name_unicode_mod"] <- sapply(temp.df[,"name_unicode"], 
             function(x) { 
              temp <- unlist(strsplit(x,";")) 
              temp <- sprintf("%x",as.integer(gsub("[^0-9]","",temp))) 
              temp <- intToUtf8(as.u_char_range(temp)) 
              return(temp) 
              }) 


write.csv(temp.df,file("test.csv",encoding="UTF-8"),row.names=FALSE) 

Dane wyjściowe dla temp.df[,"name_unicode_mod"] są prawidłowe dla konsoli R. Ale muszę wyeksportować je w formacie csv lub xls. Próbowałem write.csv, write.table, odbcConnectExcel w RODBC, ale wszystkie daje mi coś w rodzaju <U+00A7><U+00AE><U+00A3>.

Czy ktoś może pomóc? Dzięki.

P.S. Używam R 3.0.0 i Win7

+0

Czy próbowałeś również użyć argumentu 'encoding' w funkcji' write.table'? –

+2

tried: 'out <- file (" test.txt "," w ", kodowanie =" UTF-8 "); write.table (temp.df, out, row.names = FALSE); close (out) ' nadal nie działa – lokheart

+2

+1, ponieważ czuję twój ból z kodowaniem. –

Odpowiedz

5

Używanie pisania binarnego będzie działać w twoim przypadku. Poniżej znajduje się mały przykładowy kod do wykonania.

writeUtf8csv <- function(x, file) { 
    con <- file(file, "wb") 
    apply(x, 1, function(a) { 
     b <- paste(paste(a, collapse=','), '\r\n', sep='') 
     writeBin(charToRaw(b), con, endian="little") 
    }) 
    close(con) 
} 

Więcej szczegółów w this reference page.