如何检测 read.csv 的正确编码?

2023-11-24

我有这个文件(http://b7hq6v.alterupload.com/en/),我想用 R 来读取它read.csv。但我无法检测到正确的编码。好像是UTF-8的一种。我在 WindowsXP 计算机上使用 R 2.12.1。 有帮助吗?


首先基于 StackOverflow 上更一般的问题不可能 100% 确定地检测文件的编码。

我已经挣扎了很多次并得出非自动解决方案:

Use iconvlist获取所有可能的编码:

codepages <- setNames(iconvlist(), iconvlist())

然后使用它们中的每一个读取数据

x <- lapply(codepages, function(enc) try(read.table("encoding.asc",
                   fileEncoding=enc,
                   nrows=3, header=TRUE, sep="\t"))) # you get lots of errors/warning here

这里重要的是了解文件的结构(分隔符、标题)。使用设置编码fileEncoding争论。只读取几行。
现在您可以查找结果:

unique(do.call(rbind, sapply(x, dim)))
#        [,1] [,2]
# 437       14    2
# CP1200     3   29
# CP12000    0    1

看起来正确的是 3 行 29 列,所以让我们看看它们:

maybe_ok <- sapply(x, function(x) isTRUE(all.equal(dim(x), c(3,29))))
codepages[maybe_ok]
#    CP1200    UCS-2LE     UTF-16   UTF-16LE      UTF16    UTF16LE 
#  "CP1200"  "UCS-2LE"   "UTF-16" "UTF-16LE"    "UTF16"  "UTF16LE" 

你也可以看一下数据

x[maybe_ok]

对于您的文件,所有这些编码都会返回相同的数据(部分原因是如您所见存在一些冗余)。

如果您不知道需要使用的文件的具体信息readLines工作流程发生一些变化(例如,您不能使用fileEncoding,必须使用length代替dim,做更多的魔法来找到正确的)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测 read.csv 的正确编码? 的相关文章

随机推荐