我正在尝试导入日语的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参数,但在每种情况下都收到相同的“无效多字节字符串”消息。是否应该使用不同的编码,还是存在其他问题?
答案 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
这个问题的人以下是我解决它的方法:
> library (rattle)
(如果没有这样做的话)> crv$csv.encoding="latin1"
> rattle()
这对我有用,希望这有助于疲惫的旅行者
答案 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()
来读取它。添加扩展程序解决了该问题。