【发布时间】:2013-11-21 13:29:15
【问题描述】:
虽然 R 似乎在内部可以很好地处理 Unicode 字符,但我无法在 R 中输出带有此类 UTF-8 Unicode 字符的数据帧。有什么办法可以强制吗?
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
>
【问题讨论】:
-
在终端、vi 或 emacs 中查看文件时适用于我(Ubuntu 12.04 上的 R-devel)。
-
@BenBolker 这是否意味着这个问题是特定于 Windows 版本的 R 的?
-
澄清一下:这是一个特定于 Windows 的问题。在 OS X 上,结果可验证是正确的。
file test.txt回复test.txt: UTF-8 Unicode text。 hexdump 显示正确的字节。不过问题写得很好。 -
说这是 Windows 的 R 版本特有的问题不是更正确吗(R 存在不同的版本,具体取决于操作系统)?否则我在 Windows 中使用 UTF-8 和 Unicode 没有任何问题,所以我怀疑问题出在 Windows 上。
-
我已向 R-devel 邮件列表提交了一个请求,希望在未来的 R for Windows 版本中正确支持 UTF-8。