0

我遇到了这种奇怪的情况:

我需要将数据框保存到 .csv 文件 UTF-8 并以 LF 结尾。我在 Windows 10 机器上使用最新版本的 R 和 Rstudio。

我的第一次尝试是天真地做:

write.csv(df, fileEncoding="UTF-8", eol="\n")

使用 Notepad++ 检查,似乎编码是 UTF-8,但是行尾是 CRLF 而不是 LF。好的,让我们用记事本仔细检查一下:惊喜,惊喜,根据记事本,编码是 ANSI。在这一点上,我很困惑。

在查看了函数write.csv的文档后,我读到:

CSV 文件不记录编码

我不是该主题的专家,因此我决定还原并使用write.table将文件保存为简单的 .txt ,如下所示:

write.table(df, fileEncoding="UTF-8", eol="\n")

再次,与上述相同的结果。没有任何变化。我尝试了这些组合

write.csv(df)
write.table(df)

没有指定的编码但没有变化。然后我将 Rstudio 中的默认编码设置为 UTF-8 和 LF 行尾(如下图所示)

在此处输入图像描述

并再次运行测试。没变。我错过了什么??

4

1 回答 1

1

这很奇怪,至少对我来说。尽管如此,通过阅读write.table的文档,我找到了解决方案。显然在 Windows 上,要保存 Unix 风格的文件,您必须打开到文件的二进制连接,然后使用所需的 eol 保存文件:

f <- file("filename.csv", "wb")
write.csv(df, file=f, eol="\n")
close(f)

就 UTF-8 格式而言,全局设置应该可以正常工作。

使用 Notepad++ 检查 eol 是否为 LF。UTF-8 更难检查,因为在 Linux 上 isutf8(来自 moreutils)说文件确实是 UTF-8,但 Windows 的记事本在保存时不同意并说它们是 ANSI。

于 2018-01-24T10:57:14.977 回答