如何使用 Rstudio 将数据帧保存为具有 UTF-8 编码和以 R 结尾的 LF 行的 .csv 文件?

How to save a dataframe as a .csv file with UTF-8 encoding and LF line ending in R using Rstudio?

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

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

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

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

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

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

CSV files do not record an encoding

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

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

还是和上面一样的结果。没有任何变化。我尝试了这些组合

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

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

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

这很奇怪,至少对我来说是这样。尽管如此,通过阅读 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。