将CSV导出为ISO-8859-1编码,而不是UTF-8编码。

5
我在csv导出中遇到了编码问题。我来自荷兰,我们使用许多分音符(例如ëï)和重音符号(例如éó)等。这会导致在导出到csv并在Excel中打开文件时出现问题。
在macOS Mojave上。
我尝试过多个编码函数,如下所示。
library(stringr)
library(readr)

test <- c("Argentinië", "België", "Haïti")

test %>%
  stringi::stri_conv(., "UTF-8", "ISO-8859-1") %>%
  write.csv2("~/Downloads/test.csv")

但是,这会导致奇怪的字符出现:

在此处输入图片描述


1
你确定问题不是出在 Excel 上吗?作为对照,你可以尝试在像 Notepad++ 这样的软件中打开 CSV 文件,看看编码是否正确。 - Tim Biegeleisen
在普通文本编辑器中,它没有任何问题。因此,这很可能是 Excel 的问题... 我该如何确保人们在导入 Excel 时使用正确的编码呢..? - Tdebeus
3个回答

5

如何确保人们在Excel中导入正确的编码方式?

不要转换为iso-8859-1,而是使用readr::write_excel_csv2()进行导出。它会将文件写成UTF-8格式,并带有字节顺序标记(BOM),这样Excel就能理解了。

library(readr)
test <- c("Argentinië", "België", "Haïti")

我需要将test转换为UTF-8,因为我使用的是Windows系统。
test <- enc2utf8(test)

在 MacOS 上,test 应该已经使用 UTF-8 编码,因为这是本地编码。
Encoding(test)
#> [1] "UTF-8" "UTF-8" "UTF-8"

使用readr::write_excel_csv2()将文件保存为Excel csv格式

write_excel_csv2(data.frame(x = test), "test.csv")

或者使用 writexl::write_xlsx() 将文件保存为 xlsx

writexl::write_xlsx(data.frame(x = test), "test.xlsx")

test.csv in Excel


0

test <- c("Argentinië", "België", "Haïti")

con <- file('~/test.csv', encoding = "ISO-8859-1")

write.csv(x = test, file = con)

在我的bash中调用csvlook test.csv -e "ISO-8859-1"返回以下结果: | a | x | | - | ---------- | | 1 | Argentinië | | 2 | België | | 3 | Haïti |


嗯,是的,我认为问题出在Excel打开文件时...如果我在文本编辑器中打开文件,一切都很顺利... - Tdebeus
这很可能是一个Excel问题。 - Tim Biegeleisen
我明白了,我使用的是Mac电脑,我也测试过Numbers,它可以正常工作。 - Pasqui
那么在 R 中没有什么可以解决这个问题的吗? - Tdebeus
我明白了...我曾经也遇到过这个问题,我的解决方案是附加几个PNG文件作为逐步教程... - Pasqui
显示剩余2条评论

0

做简单的事情

只需在记事本中打开文件并另存为UTF-8格式,然后在Excel中打开保存的记事本文件,它会要求您进行导入操作,根据您的报告进行分隔符,并使用逗号作为列分隔符完成导入。您将获得干净的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接