将像ÆØÅ这样的特殊字符读入R(Rstudio)

7
我正在尝试读取一个包含用挪威语编写的问卷数据的CSV文件。因此,该文件包含字母Æ Ø Å,但R似乎无法很好地处理这些字母,它们都显示为问号。
我使用以下代码来读取数据:
data <- read.csv2("Responser - Vasket - 20.06.2013.csv")

有没有什么选项应该使用,让R知道我有特殊字符?
而且我正在Windows 7上使用Rstudio。

3
尝试使用 encoding = "UTF-16"。这是一个指示编码方式的命令,建议在编程中使用。 - user1609452
或者使用编码 = ISO-8859-1。根据此处:查看完全覆盖的语言。 - agstudy
1
这些都没有解决它。我仍然得到问号。还有更多的提示吗? - Ole Henrik Skogstrøm
3个回答

5
您需要在read.csv2中指定fileEncoding参数(而不是)encoding)。


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

这是您需要传递给fileEncoding的值。如果文件不是UTF-16,则无法仅声明文件为UTF-16。这就是为什么您收到警告的原因。


fileEncoding = "UTF-16" 给我警告并取消了导入。ISO-8859-1 对问号没有任何作用 :-/ - Ole Henrik Skogstrøm
嗨@OleHenrikSkogstrøm,你是如何解决这个问题的?我需要导入既有挪威字母又有瑞典字母的数据。 - dsauce

3
根据我的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中使用查看命令,这个错误仍然存在”和“如果我只是输入并将结果放入控制台中,它就能工作”,揭示出原始帖子中给出的信息不足。

我的上面的答案实际上适用于最初提出的问题:将特殊字符读入R。但是,并且在OP中没有指定的是不起作用的是,使用RStudio的‘View’显示æøå不正确。当从控制台运行View(dd)dd请参见上面的虚拟数据)时,在‘Workspace pane’中单击该对象时,数据查看器中会将æøå显示为“黑色菱形问号”。反之,如果您仅使用RGui而不使用RStudio,则View(dd)在数据查看器中正确地显示字符。

因此,与将æøå读入R有关的问题不是问题,而是在RStudio中进行View -ing的问题。另请参见RStudio支持上的此帖子。


嗨,很抱歉这么晚才回复你。我一度忘记了这个问题。这个答案写得非常好,但是对我来说并不起作用。我得到了与您相同的区域设置输出,但我的数据集dd和dd2仍然显示为问号。:-/ 有什么建议吗? - Ole Henrik Skogstrøm
嗯... getOption("encoding") 返回的是 "native.enc"?那就试试这个:read.table(text='"æ", "ø", "å"', sep = ",", encoding = "native.enc") - Henrik
很奇怪,如果我在Rstudio中创建一个数据框并使用视图命令,这个错误仍然存在。但是,如果我只是手动输入并将结果放入控制台,它就可以工作... 有什么想法吗? :) - Ole Henrik Skogstrøm
为了帮助您,我认为您需要更明确地说明问题,并更清楚地介绍您已尝试过的方法。请提供一个最小化可重现的示例。我的答案是否实际解决了您原始帖子中描述的问题?您没有提到使用“Rstudio中的view命令”。 - Henrik

2
嗨,亨利克,当使用Excel生成的包含 Ø Æ Å 的csv文件在R中打开时,它们会将挪威字母显示为一个黑色钻石,中间有一个白色问号。对我来说,这个问题明显是基于编码的,但我无法成功地使用“编码”或“fileEncoding”正确打开它们。
我通过在记事本中打开csv文件,将其转换为文本文件,并将编码从“ANSI”更改为“UTF-8”来解决了我的系统上的问题。请参见以下示例。
下面的链接包含两个由Excel创建的csv文件,一个编码为MS-DOS编码(Names CSV MSDOS),另一个编码为“逗号分隔”的样式(Names 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的示例操作,一切都很好,直到我尝试从不同的脚本中读取包含read.csv2(file = "åæø.csv")的ANSI编码文件åæø.csv时。在源代码时,R给了我非常恼人的错误提示:“invalid input found on input connection”和“Incomplete Final Line found by readTableHeader”,这是没有意义的,因为我能够在原始脚本中读取csv文件。然而,将csv文件更改为UTF-8编码对我起了作用!希望这能帮助下一个人 :) - chilifan

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