【问题标题】:Reading special characters like ÆØÅ into R (Rstudio)将诸如ÆØÅ之类的特殊字符读入R(Rstudio)
【发布时间】:2013-06-24 09:11:54
【问题描述】:

我正在尝试读取包含用挪威语编写的问卷数据的 CSV 文件。所以这个文件包含字母 Æ Ø Å,但是 R 似乎不能很好地处理这些字母,它们都显示为问号。

我用这个来读取数据:

data <- read.csv2("Responser - Vasket - 20.06.2013.csv")

我应该使用任何选项让 R 知道我有特殊字符吗?

我在 Windows 7 上使用 Rstudio。

【问题讨论】:

  • 试试encoding = "UTF-16"
  • 或 enocding =ISO-8859-1 应该这样做。根据this:请参阅完整覆盖的语言。
  • 这些都没有解决它。我仍然得到问号。还有更多提示吗?

标签: r csv special-characters


【解决方案1】:

您需要将 fileEncoding 参数指定给 read.csv2not 以及 (?) encoding)。


在使用 R 之前,最好使用文本编辑器检查文件的编码。例如,如果您在 Notepad++ 中打开文件,“编码”菜单可让您查看和更改字符编码。在 TextPad 中,您可以从 Save As.. 对话框更改编码。大多数文本编辑器都会有这样的功能。

这是你需要传递给fileEncoding的值;如果还没有,您不能只将文件声明为 UTF-16。这就是您收到警告的原因。

【讨论】:

  • fileEncoding = "UTF-16" 给我警告并取消导入。 ISO-8859-1 对问号没有任何作用:-/
  • 嗨@OleHenrikSkogstrøm 你是如何解决这个问题的?我需要同时使用挪威语和瑞典语字母导入数据
【解决方案2】:

鉴于我的 R 版本和设置,这对我有用:
在记事本中,我检查 csv 文件是否使用“编码:ANSI”保存。
在 RStudio 中:工具/选项/默认文本编码:ISO8859-1

我试过这样的虚拟数据:

dd <- data.frame(area = c("øø", "åå", "ææ"), site = c("åå", "ææ", "øø")) 
write.csv2(x = dd, file = "åæø.csv", row.names = FALSE)
dd2 <- read.csv2(file = "åæø.csv")
all.equal(dd, dd2)

sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=Norwegian (Bokmål)_Norway.1252  LC_CTYPE=Norwegian (Bokmål)_Norway.1252   
[3] LC_MONETARY=Norwegian (Bokmål)_Norway.1252 LC_NUMERIC=C                              
[5] LC_TIME=Norwegian (Bokmål)_Norway.1252


getOption("encoding")
[1] "native.enc"

编辑@Ole Henrik Skogstrøm 8 月 7 日 7:57 的以下评论

@Ole Henrik Skogstrøm 的评论“如果我......在 Rstudio 中使用视图命令,这个错误仍然存​​在”和“如果我只是输入它并将结果放在控制台中它可以工作”来自@Ole Henrik Skogstrøm 透露给出的信息在原始帖子中是不够的。

我上面的回答适用于实际提出的原始问题:将特殊字符读入 R。什么不起作用不是在 OP 中指定的,是 'View-ing' RStudio 中的对象显示æøå 不正确。从控制台运行View(dd)dd,参见上面的虚拟数据)以及单击“工作区窗格”中的对象时,æøå 在数据查看器中显示为“黑色菱形问号”。

另一方面,如果您只使用 RGui,而不使用 RStudio,View(dd) 会在数据查看器中正确显示字符。

因此,这似乎不是将æøå 读入 R 的问题,而是 View-在 RStudio 中处理它们的问题。另见this post on RStudio support

【讨论】:

  • 您好,很抱歉这么久才回复您。我暂时忘记了这个问题。这个答案写得很好,但它对我不起作用。我得到与您相同的语言环境输出,但我的数据集 dd 和 dd2 仍显示为问号。 :-/ 有什么建议吗?
  • 嗯...而getOption("encoding") 给出“native.enc”?试试看:read.table(text='"æ", "ø", "å"', sep = ",", encoding = "native.enc")?
  • 奇怪的是,如果我创建一个数据框并在 Rstudio 中使用 view 命令,这个错误仍然存​​在。但是,如果我只是输入它并将结果放在控制台中它可以工作......知道为什么吗? :)
  • 为了帮助你,我认为你需要更明确你的问题是什么,并且更清楚你所尝试的。请提供一个最小的可重现示例。我的答案是否适用于您原始帖子中实际描述的问题?您没有提到在 Rstudio 中使用“查看命令”。
【解决方案3】:

Hei Henrik,当 csv 文件(由 Excel 生成)包含 Ø Æ Å 时,我遇到了同样的问题,在 R 中打开它们会将挪威字母显示为黑色菱形,中间有一个白色问号。对我来说,问题肯定是基于编码的,但是我无法成功使用“encoding”或“fileEncoding”正确打开它们。

我通过在记事本中打开 csv 然后将其转换为文本文件并将编码从“ANSI”更改为“UTF-8”来解决系统上的问题。请参阅示例。

以下链接包含两个由 excel 创建的 csv 文件,一个以 MS-DOS 编码(名称 CSV MSDOS)编码,另一个以“逗号分隔”(名称 CSV)样式编码

https://drive.google.com/folderview?id=0BzoGQiFdDwiNNm02UnNLVVNja3c&usp=sharing

在记事本中打开它们应该会显示 MS-DOS 版本的字母表示不正确(因此可以忽略),而“逗号分隔”版本的表示正确。将“Names CSV”文件保存为编码为“UTF-8”并称为“Names CSV UTF8”的文本文件。将 R 中的工作目录设置为文件所在的文件夹并运行以下代码。

test1 <- read.csv2("Names CSV.csv")
test2 <- read.csv2("Names CSV UTF8.txt")

test1 应该显示带有问号的黑色菱形 test2 应该正确显示名称。

我认为以前的答案可能不起作用,因为该表是由 R 创建的,并且 R 设置了字符编码,而我遇到的问题,我相信你也有一个不同的系统软件一直在设置编码。

如果您有很多文件要处理,这个解决方案不是很有用,但它至少是一个开始。

【讨论】:

  • 这个解决方案对我有用,谢谢!我之前遵循了来自@Henrik 的示例,该示例运行良好,直到我尝试使用来自不同脚本的 ANSI 编码文件 åæø.csv 来获取包含 read.csv2(file = "åæø.csv") 的文件。采购时,R 给了我非常烦人的信息:“在输入连接上发现无效输入”和“readTableHeader 发现不完整的最后一行”,这没有意义,因为我能够读取原始脚本中的 csv 文件。但是,将 csv 文件更改为 UTF-8 编码对我有用!希望这可以帮助下一个人:)
猜你喜欢
  • 2016-05-06
  • 2017-05-16
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多