read.csv中的多字节字符串无效

时间:2013-01-16 16:29:39

标签: r read.csv

我正在尝试导入日语的csv。这段代码:

url <- 'http://www.mof.go.jp/international_policy/reference/itn_transactions_in_securities/week.csv'
x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE)

返回以下错误:

Error in type.convert(data[[i]], as.is = as.is[i], dec = dec, na.strings = character(0L)) : 
invalid multibyte string at '<91>ΊO<8b>y<82>ёΓ<e0><8f>،<94><94><84><94><83><8c>_<96>̏@(<8f>T<8e><9f><81>E<8e>w<92><e8><95>@<8a>փx<81>[<83>X<81>j'

我尝试更改编码(Encoding(url) <- 'UTF-8'以及latin1)并尝试删除read.csv参数,但在每种情况下都收到相同的“无效多字节字符串”消息。是否应该使用不同的编码,还是存在其他问题?

8 个答案:

答案 0 :(得分:67)

Encoding设置字符串的编码。它不会设置由字符串表示的文件的编码,这就是您想要的。

在尝试"UTF-8"之后,这对我有用:

x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE, fileEncoding="latin1")

您可能希望跳过前16行,并分别读入标题。无论哪种方式,还有很多需要清理的事情。

x <- read.csv(url, header=FALSE, stringsAsFactors=FALSE,
  fileEncoding="latin1", skip=16)
# get started with the clean-up
x[,1] <- gsub("\u0081|`", "", x[,1])    # get rid of odd characters
x[,-1] <- as.data.frame(lapply(x[,-1],  # convert to numbers
  function(d) type.convert(gsub(d, pattern=",", replace=""))))

答案 1 :(得分:9)

由于系统区域设置不兼容,您可能遇到过此问题 尝试使用此代码Sys.setlocale("LC_ALL", "C")

设置系统区域设置

答案 2 :(得分:6)

来自tidyverse宇宙的readr包可能会有所帮助。

您可以使用read_csv()函数及其编码参数,通过local()函数的local参数设置编码:

read_csv(file = "http://www.mof.go.jp/international_policy/reference/itn_transactions_in_securities/week.csv",
         skip = 14,
         local = locale(encoding = "latin1"))

答案 3 :(得分:0)

对于那些使用Rattle这个问题的人以下是我解决它的方法:

  1. 首先确保退出拨浪鼓,以便在R命令提示下
  2. > library (rattle)(如果没有这样做的话)
  3. > crv$csv.encoding="latin1"
  4. > rattle()
  5. 你现在应该可以继续了。即,导入你的csv&gt;执行&gt;型号&gt;执行等。
  6. 这对我有用,希望这有助于疲惫的旅行者

答案 4 :(得分:0)

如果您尝试导入的文件最初是Excel文件。确保打开原始文件并另存为csv,并在导入R时为我修复了此错误。

答案 5 :(得分:0)

我遇到了同样的错误并尝试了以上所有内容无济于事。当我从R 3.4.0升级到3.4.3时,问题就消失了,所以如果您的R版本不是最新的,请更新它!

答案 6 :(得分:0)

我发现的最简单的解决方案是不丢失任何数据/特殊字符(例如,使用fileEncoding="latin1"字符,例如欧元符号€时将丢失),首先要在诸如Sublime的文本编辑器中打开文件文本,然后输入“使用编码保存-UTF-8”。

然后R可以毫无问题且没有字符丢失地导入文件。

答案 7 :(得分:0)

我最近遇到了此错误(invalid multibyte string 1),但是我的问题有点不同:

我们忘记保存带有扩展名的csv.gz文件,而是尝试使用read_csv()来读取它。添加扩展程序解决了该问题。