如何在 fwrite() 中指定编码以导出 csv 文件 R?

ran*_*ane 7 r fwrite

由于fwrite()无法应用编码参数,我如何以最快的速度导出特定编码的 csv 文件fwrite()?(fwrite()是迄今为止我承认的最快的功能)

fwrite(DT,"DT.csv",encoding = "UTF-8")
Error in fwrite(DT, "DT.csv", encoding = "UTF-8") : 
  unused argument (encoding = "UTF-8")
Run Code Online (Sandbox Code Playgroud)

use*_*330 7

您应该发布一个可重现的示例,但我想您可以通过确保 R 中的数据DT采用 UTF-8格式,然后将每列的编码设置为“未知”来实现。然后,当您写出数据时,R 将假定数据以本机编码进行编码。

例如,

DF <- data.frame(text = "á", stringsAsFactors = FALSE)
DF$text <- enc2utf8(DF$text) # Only necessary if Encoding(DF$text) isn't "UTF-8"
Encoding(DF$text) <- "unknown"
data.table::fwrite(DF, "DF.csv", bom = TRUE)
Run Code Online (Sandbox Code Playgroud)

如果 的列DF是因子,则需要将它们转换为字符向量才能起作用。


小智 7

截至撰写本文时,fwrite 不支持强制编码。我使用了一种解决方法,但它比我想要的要迟钝一些。对于你的例子:

readr::write_excel_csv(DT[,0],"DT.csv")
data.table::fwrite(DT,file = "DT.csv",append = T)
Run Code Online (Sandbox Code Playgroud)

第一行将仅将数据表的标题保存到 CSV,默认为 UTF-8,并带有字节顺序标记,以便让 Excel 知道该文件采用 UTF-8 编码。然后, fwrite语句使用追加选项将其他行添加到原始 CSV。这保留了write_excel_csv的编码,同时最大限度地提高了写入速度。