R write.csv使用UTF-16编码

Dan*_*son 12 csv unicode r utf-16 character-encoding

write.csv使用UTF-16字符编码输出data.frame时遇到问题.

背景:我正在尝试从data.frame中写出一个CSV文件,以便在Excel中使用.Excel Mac 2011似乎不喜欢UTF-8(如果我在文本导入期间指定UTF-8,则非ASCII字符显示为下划线).我一直认为Excel会对UTF-16LE编码感到满意.

这是示例data.frame:

> foo
  a  b
1 á ?
> Encoding(levels(foo$a))
[1] "UTF-8"
> Encoding(levels(foo$b))
[1] "UTF-8"
Run Code Online (Sandbox Code Playgroud)

所以我尝试输出data.frame:

f <- file("foo.csv", encoding="UTF-16LE")
write.csv(foo, f)
Run Code Online (Sandbox Code Playgroud)

这给了我一个看起来像这样的ASCII文件:

"","
Run Code Online (Sandbox Code Playgroud)

如果我使用encoding="UTF-16",我得到一个只包含字节顺序标记的文件0xFE 0xFF.

如果我使用encoding="UTF-16BE",我会得到一个空文件.

这是在Mac OS X 10.6.6上的64位版本的R 2.12.2上.我究竟做错了什么?

dar*_*zig 7

您可以简单地将csv保存为UTF-8,然后在终端中使用iconv将其转换为UTF-16LE .

如果您坚持在R中执行此操作,则以下操作可能会起作用 - 尽管似乎iconv在R中确实存在一些问题,请参阅:http://tolstoy.newcastle.edu.au/R/e10/devel/10/06/0648 html的

> x <- c("foo", "bar")
> iconv(x,"UTF-8","UTF-16LE")
Error in iconv(x, "UTF-8", "UTF-16LE") : 
  embedded nul in string: 'f\0o\0o\0'
Run Code Online (Sandbox Code Playgroud)

你可以看到真正需要上面链接的补丁 - 我没有测试过,但是如果你想让它保持模拟(并且讨厌):system在将表保存到csv后,只需调用R中的第三方iconv程序.