2013-04-16 13 views
5

ユニコードを中国語の文字に変換するためのスクリプトを作成しました。temp.df[,"name_unicode"]の最後の文字列は "§£"(引用符なし)で、中国語を知らない人も役に立ちます。ユニコードの変換とエクスポート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) 

temp.df[,"name_unicode_mod"]の出力には、RコンソールのOKです。しかし、私はcsvまたはxls形式でそれらをエクスポートする必要があります。私はwrite.csvwrite.tableodbcConnectExcelRODBCに入れましたが、どれも<U+00A7><U+00AE><U+00A3>のようなものです。

誰でも手助けできますか?ありがとう。

P.S.私はR 3.0.0とWin7を使用しています

+0

'write.table'関数の' encoding'引数も使ってみましたか? –

+2

試みました: 'out < - file(" test.txt "、" w "、encoding =" UTF-8 "); write.table(temp.df、out、row.names = FALSE); close(out) ' がまだ失敗する – lokheart

+2

+1私はエンコーディングであなたの苦痛を感じます。 –

答えて

5

バイナリ書き込みを使用すると、あなたのケースで動作します。 以下は、行うべき小さなサンプルコードです。

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

詳細はthis reference pageに示されている。

関連する問題