在R中进行Unicode转换和导出

5

我已经创建了一个脚本,用于将Unicode转换为中文字符。在temp.df[,"name_unicode"]中的最后一个字符串是"§®£"(不带引号),这样那些不懂中文的人也可以帮助。

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的。但我需要以csvxls格式将它们导出。我尝试使用write.csv, write.table, RODBC中的odbcConnectExcel,但所有这些都给我一些像<U +00A7><U +00AE><U +00A3>的东西。

有人能帮忙吗?谢谢。

附:我正在使用R 3.0.0和Win7。


你尝试过在write.table函数中使用encoding参数吗? - Ricardo Saporta
2
尝试过以下代码:out <- file("test.txt", "w", encoding="UTF-8");write.table(temp.df, out, row.names=FALSE);close(out),但仍然失败。 - lokheart
2
+1 是因为我理解你的编码烦恼。 - Roman Luštrik
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)
}

更多详细信息请参考此参考页面


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接