2013-04-16 14 views
5

Ho creato uno script di seguito per convertire unicode in caratteri cinesi, l'ultima stringa in temp.df[,"name_unicode"] è "§® £" (senza preventivo), in modo che anche le persone che non conoscono il cinese possano essere d'aiuto.conversione Unicode ed esportazione in 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) 

L'uscita per temp.df[,"name_unicode_mod"] è OK per la console R. Ma ho bisogno di esportarli nel formato csv o xls. Ho provato write.csv, write.table, odbcConnectExcel in RODBC ma tutto mi dà qualcosa come <U+00A7><U+00AE><U+00A3>.

Qualcuno può aiutare? Grazie.

P.S. Sto usando R 3.0.0 e Win7

+0

Hai provato a utilizzare anche l'argomento 'encoding' nella funzione' write.table'? –

+2

provato: 'out <- file (" test.txt "," w ", encoding =" UTF-8 "); write.table (temp.df, out, row.names = FALSE); chiudere (out) ' fallire ancora – lokheart

+2

+1 perché sento il tuo dolore con la codifica. –

risposta

5

Utilizzare una scrittura binaria funzionerà per il tuo caso. Quanto segue è un piccolo codice di esempio da eseguire.

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) 
} 

Maggiori dettagli sono riportati nella this reference page.

Problemi correlati