无法将 unicode .csv 读入 R
Posted
技术标签:
【中文标题】无法将 unicode .csv 读入 R【英文标题】:Cannot read unicode .csv into R 【发布时间】:2013-05-26 04:08:54 【问题描述】:我有一个 .csv 文件,其中包含以下数据:
"Ա","Բ"
1,10
2,20
我无法将其读入 R 中,因此列名的显示方式与文件中的一样。
d <- read.csv("./Data/1.csv", fileEncoding="UTF-8")
head(d)
产生以下内容:
> d <- read.csv("./Data/1.csv", fileEncoding="UTF-8")
Warning messages:
1: In read.table(file = file, header = header, sep = sep, quote = quote, :
invalid input found on input connection './Data/1.csv'
2: In read.table(file = file, header = header, sep = sep, quote = quote, :
incomplete final line found by readTableHeader on './Data/1.csv'
> head(d)
[1] X.
<0 rows> (or 0-length row.names)
同时,在不指定 fileEncoding 的情况下执行相同操作会产生以下结果:
> d <- read.csv("./Data/1.csv")
> head(d)
Ô. Ô²
1 1 10
2 2 20
当我运行“文件”实用程序来找出文件的编码时,它说它是 UTF-8:
Data\1.csv: UTF-8 Unicode text, with CRLF line terminators
我使用的是 RStudio,Windows 7,R 版本 2.15.2,32 位。
提前致谢。
【问题讨论】:
在 Linux 上使用 R 2.15.3 非常适合我。 (第二个警告可能只是文件最后一行缺少“输入”) 我可以复制这个问题。我从未使用过这些参数,而是使用encoding
代替,即read.csv(..., encoding="UTF-8")
读取文件但标题未显示为字母,而是显示为X.U.FEFF..U.0531. X.U.0532.
。
观察:> a = "Ա"; > a; [1] "Ա"
工作正常,但这不行:data.frame(a); # a #1 <U+0531>
可能的解决方法:读取数据并手动添加名称。 names(data) 当你想把它写出来时,问题就来了。我写不出来,但也许有一个解决方案。
我在尝试导入 .csv 推文时遇到了类似的问题。 user_name
和 tweet
字段都包含非英文字符等。Here's a gist with a sample of the data. 任何想法如何正确导入此文件并设置正确的编码?
【参考方案1】:
我尝试了两种方法来复制您的问题。
我将上面的字符复制到 RStudio 中,并使用以下代码将其保存到 csv:
write.csv(c("Ա","Բ",
1,10,
2,20), "test.csv")
df <- read.csv("test.csv")
这很好用。
然后我想,当我用 R 将它保存到 CSV 时,也许 R 是在作弊?所以我只是将字符粘贴到文本文件中并将其保存为 CSV。这种方法也没有问题。
这是我的会话信息:
sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: x86_64-pc-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_CA.UTF-8 LC_NUMERIC=C LC_TIME=en_CA.UTF-8
[4] LC_COLLATE=en_CA.UTF-8 LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8
[7] LC_PAPER=C LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats4 grid stats graphics grDevices utils datasets methods base
other attached packages:
[1] party_1.0-9 modeltools_0.2-21 strucchange_1.4-7 sandwich_2.2-10 zoo_1.7-10
[6] GGally_0.4.4 reshape_0.8.4 plyr_1.8 ggplot2_0.9.3.1
loaded via a namespace (and not attached):
[1] coin_1.0-23 colorspace_1.2-2 dichromat_2.0-0 digest_0.6.3
[5] gtable_0.1.2 labeling_0.2 lattice_0.20-23 MASS_7.3-29
[9] munsell_0.4.2 mvtnorm_0.9-9995 proto_0.3-10 RColorBrewer_1.0-5
[13] reshape2_1.2.2 scales_0.2.3 splines_3.0.1 stringr_0.6.2
【讨论】:
【参考方案2】:我遇到了同样的问题,发现文件已损坏。
我使用 OpenOffice 打开文件并使用“UTF8”字符集将其保存回来(您需要单击编辑过滤器设置框),然后使用 read.csv()
(无编码或文件编码选项)将其导入,它工作正常.
【讨论】:
【参考方案3】:我在这里就同一问题写了更长的答案:R on Windows: character encoding hell。
快速回答,使用参数 encoding 而不是 fileEncoding 应该可以解决您的第一个问题。您可能无法在 RStudio 的控制台或表格视图中阅读它,但您可以在公式中使用它。
d <- read.csv("./Data/1.csv", encoding="UTF-8")
head(d)
已将表格保存为 UTF-8 文件:
> test2 <- read.csv("test2.csv", header = FALSE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "", encoding = "UTF-8")
Warning message:
In read.table(file = file, header = header, sep = sep, quote = quote, :
incomplete final line found by readTableHeader on 'test2.csv'
这为您提供了它在控制台和 RStudio 视图中的外观
> test2
V1 V2
1 <U+0531> <U+0532>
2 1 10
3 2 20
但重要的是,您可以在 R 中对其进行操作。因此,在我的情况下,可以看到脚本窗口输入 Ա 具有 UTF-8 编码,并且 grep 可以在您的表中正确找到此编码。
> Encoding("Ա")
[1] "UTF-8"
> grep("Ա", as.character(test2[1,1]))
[1] 1
您可能需要找到适用于您的设置的合适编码变体,或者可能需要更改它们。不幸的是,我不确定它在哪里完成。
您可能无法在所有阶段都让它变得漂亮,但绝对有可能让它在 Windows 7 环境中也能正常工作。
【讨论】:
我相信fileEncoding
是读取文件的正确参数,而encoding
用于直接文本。以上是关于无法将 unicode .csv 读入 R的主要内容,如果未能解决你的问题,请参考以下文章
将 pandas df 写入 csv 时出现 Unicode 编码错误
读取 csv 文件时出错(unicode 错误)“unicodeescape”编解码器无法解码位置 2-3 中的字节:截断 \UXXXXXXXX 转义 [重复]