2013-04-16 10 views
5

Ich habe unten ein Skript zum Konvertieren von Unicode in chinesische Schriftzeichen erstellt, die letzte Zeichenfolge in temp.df[,"name_unicode"] ist "§® £" (ohne Zitat), so dass auch Leute, die chinesisch nicht können, helfen können.Unicode-Konvertierung und Export 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) 

Der Ausgang für temp.df[,"name_unicode_mod"] ist für R Konsole OK. Aber ich muss sie in csv oder xls Format exportieren. Ich versuchte write.csv, write.table, odbcConnectExcel in RODBC, aber alles gibt mir etwas wie <U+00A7><U+00AE><U+00A3>.

Kann jemand helfen? Vielen Dank.

P.S. Ich verwende R 3.0.0 und Win7

+0

Haben Sie versucht, auch das Argument 'encoding' in der Funktion' write.table' zu ​​verwenden? –

+2

probiert: 'out <- Datei (" test.txt "," w ", encoding =" UTF-8 "); write.table (temp.df, out, row.names = FALSE); close (out) ' immer noch scheitern – lokheart

+2

+1, weil ich deinen Schmerz mit Codierung verspüre. –

Antwort

5

Die Verwendung eines binären Schreibens funktioniert für Ihren Fall. Folgendes ist ein kleiner Beispielcode zu tun.

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

Weitere Details werden in this reference page angezeigt.