11

RJDBC を介して MySQL データベースからファイルを読み込んでいますが、すべての文字が R で正しく表示されます (例: נווה שאנן)。ただし、 write.csv および fileEncoding="UTF-8" を使用してエクスポートした場合でも、出力は <U+0436>.<U+043A>. <U+041B><U+043E><U+0437><U+0435><U+043D><U+0435><U+0446>ブルガリア語、ヘブライ語、中国語などのようになります (この場合、これは上記の文字列ではなくブルガリア語の文字列です)。ã、ç などの他の特殊文字は正常に機能します。

これはUTF-8 BOMが原因だと思われますが、ネット上で解決策が見つかりませんでした

私のOSはドイツのWindows7です。

編集:試しました

con<-file("file.csv",encoding="UTF-8")
write.csv(x,con,row.names=FALSE)

そして(私の知る限り)同等のものwrite.csv(x, file="file.csv",fileEncoding="UTF-8",row.names=FALSE)

4

2 に答える 2

6

Encoding( )のヘルプ ページでhelp("Encoding")、特別なエンコーディングについて読むことができますbytes

これを使用して、次の方法で csv ファイルを生成できました。

v <- "נווה שאנן"
X <- data.frame(v1=rep(v,3), v2=LETTERS[1:3], v3=0, stringsAsFactors=FALSE)

Encoding(X$v1) <- "bytes"
write.csv(X, "test.csv", row.names=FALSE)

factorとの違いに注意してくださいcharacter。以下が機能するはずです。

id_characters <- which(sapply(X,
    function(x) is.character(x) && Encoding(x)=="UTF-8"))
for (i in id_characters) Encoding(X[[i]]) <- "bytes"

id_factors <- which(sapply(X,
    function(x) is.factor(x) && Encoding(levels(x))=="UTF-8"))
for (i in id_factors) Encoding(levels(X[[i]])) <- "bytes"

write.csv(X, "test.csv", row.names=FALSE)
于 2011-09-14T12:12:40.067 に答える