从R写入UTF-8文件

虽然R似乎在内部很好地处理Unicode字符,但是我不能用这种UTF-8 Unicode字符在R中输出dataframe。 有什么办法强制这个?

data.frame(c("hīersumian","ǣmettigan"))->test write.table(test,"test.txt",row.names=F,col.names=F,quote=F,fileEncoding="UTF-8") 

输出文本文件如下所示:

hiersumian <U+01E3>mettigan

我在Windows环境(Windows 7)中使用R版本3.0.2。

编辑


在答案中已经提出,R正确地以UTF-8编写文件,问题出在我用来查看文件的软件上。 下面是一些代码,我在R中做所有的事情。我正在用UTF-8编码的文本文件中读取,R读取正确。 然后R用UTF-8写出文件并再次读取,现在正确的Unicode字符不见了。

 read.table("myinputfile.txt",encoding="UTF-8")->myinputfile myinputfile[1,1] write.table(myinputfile,"myoutputfile.txt",row.names=F,col.names=F,quote=F,fileEncoding="UTF-8") read.table("myoutputfile.txt",encoding="UTF-8")->myoutputfile myoutputfile[1,1] 

控制台输出:

 > read.table("myinputfile.txt",encoding="UTF-8")->myinputfile > myinputfile[1,1] [1] hīersumian Levels: hīersumian ǣmettigan > write.table(myinputfile,"myoutputfile.txt",row.names=F,col.names=F,quote=F,fileEncoding="UTF-8") > read.table("myoutputfile.txt",encoding="UTF-8")->myoutputfile > myoutputfile[1,1] [1] <U+FEFF>hiersumian Levels: <U+01E3>mettigan <U+FEFF>hiersumian > 

Solutions Collecting From Web of "从R写入UTF-8文件"

这个“答案”只是为了澄清在幕后发生了一些奇怪的事情:

“häersumian”甚至没有把它看成是数据框架。 在所有情况下,“ī”符号都被转换为“i”。

 options("encoding" = "native.enc") t1 <- data.frame(a = c("hīersumian "), stringsAsFactors=F) t1 # a # 1 hiersumian options("encoding" = "UTF-8") t1 <- data.frame(a = c("hīersumian "), stringsAsFactors=F) t1 # a # 1 hiersumian options("encoding" = "UTF-16") t1 <- data.frame(a = c("hīersumian "), stringsAsFactors=F) t1 # a # 1 hiersumian 

以下序列成功地将“ǣmettigan”写入文本文件:

 t2 <- data.frame(a = c("ǣmettigan"), stringsAsFactors=F) getOption("encoding") # [1] "native.enc" Encoding(t2[,"a"]) <- "UTF-16" write.table(t2,"test.txt",row.names=F,col.names=F,quote=F) 

在这里输入图像说明

“UTF-8”或“UTF-16”不会与“编码”一起工作,并且指定“fileEncoding”将导致缺陷或不输出。

到目前为止我有点失望,我设法解决所有的Unicode问题。

我可能会丢失一些操作系统特定的,但data.table似乎没有问题(或者更可能是因为这个问题最初提出的R内部更新):

 t1 = data.table(a = c("hīersumian", "ǣmettigan")) tmp = tempfile() fwrite(t1, tmp) system(paste('cat', tmp)) # a # hīersumian # ǣmettigan fread(tmp) # a # 1: hīersumian # 2: ǣmettigan