代码之家  ›  专栏  ›  技术社区  ›  mickkk

如何将数据帧另存为。csv文件,UTF-8编码,LF行以R结尾,使用Rstudio?

  •  0
  • mickkk  · 技术社区  · 7 年前

    我遇到了一个奇怪的情况:

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

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

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

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

    查看功能文档后 write.csv 我读到:

    CSV文件不记录编码

    我不是这方面的专家,所以我决定返回并将文件保存为一个简单的。txt使用 写桌子 具体如下:

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

    同样,上述结果相同。没有任何变化。我试过这些组合

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

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

    enter image description here

    然后再次进行测试。没有变化。我错过了什么??

    1 回复  |  直到 7 年前
        1
  •  2
  •   mickkk    7 年前

    至少对我来说,这是一个奇怪的问题。尽管如此,通过阅读 write.table 我找到了解决办法。显然,在Windows上,要以Unix方式保存文件,必须打开文件的二进制连接,然后使用所需的eol保存文件:

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

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

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