由于 $scope.$parent.$parent
无法应用编码参数,如何导出特定编码的csv文件的速度与fwrite()
一样快? (fwrite()
是迄今为止我认可的最快的功能)
fwrite()
答案 0 :(得分:2)
如果您在R中工作,
尝试将其作为工作方法:
# You have DT
# DT is a data.table / data.frame
# DT$text contains any text data not encoded with 'utf-8'
library(data.table)
DT$text <– enc2utf8(DT$text) # it forces underlying data to be encoded with 'utf-8'
fwrite(DT, "DT.csv", bom = T) # Then save the file using ' bom = TRUE '
希望有帮助。
答案 1 :(得分:1)
您应该发布一个可复制的示例,但是我想您可以通过确保DT
中的数据位于R中的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")
如果DF
的列是因子,则需要先将它们转换为字符向量,然后才能起作用。
答案 2 :(得分:1)
我知道有些人已经回答了,但是我想使用user2554330的回答来提供一个更全面的解决方案。
# Encode data in UTF-8
for (col in colnames(DT)) {
names(DT) <- enc2utf8(names(DT)) # Column names need to be encoded too
DT[[col]] <- as.character(DT[[col]]) # Allows for enc2utf8() and Encoding()
DT[[col]] <- enc2utf8(DT[[col]]) # same as users' answer
Encoding(DT[[col]]) <- "unknown"
}
fwrite(DT, "DT.csv", bom = T)
# When re-importing your data be sure to use encoding = "UTF-8"
DT2 <- fread("DT.csv", encoding = "UTF-8")
# DT2 should be identical to the original DT
这应该适用于数据表上任何位置的所有UTF-8字符
答案 3 :(得分:0)
在撰写本文时,fwrite不支持强制编码。我有一种解决方法,但是比我想要的更钝。例如:
select e.first_name, e.last_name, e.manager_id
from employees e
inner join employees m on e.manager_id = m.employee_id;
第一行将仅将数据表的标头保存到CSV,默认为UTF-8,并具有要求的字节顺序标记,以使Excel知道文件已编码为UTF-8。然后, fwrite 语句使用append选项将其他行添加到原始CSV。这样可以保留 write_excel_csv 的编码,同时可以最大程度地提高写入速度。