我正在尝试导入日语的 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 参数,但在每种情况下都收到相同的“无效多字节字符串”消息。是否应该使用不同的编码,或者是否存在其他问题?
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=""))))
您可能因为系统区域设置不兼容而遇到此问题 尝试使用此代码设置系统区域设置
Sys.setlocale("LC_ALL", "C")
来自 tidyverse 宇宙的 readr 包可能会有所帮助。
您可以使用
read_csv()
函数及其编码参数,通过 local()
函数的局部参数设置编码:
read_csv(file = "http://www.mof.go.jp/international_policy/reference/itn_transactions_in_securities/week.csv",
skip = 14,
local = locale(encoding = "latin1"))
对于这个问题,我找到的最简单的解决方案是在不丢失任何数据/特殊字符的情况下(例如,当使用
fileEncoding="latin1"
字符,如欧元符号 € 时,将会丢失)是首先在 Sublime Text 等文本编辑器中打开文件,然后“使用编码保存 - UTF-8”。
然后 R 可以导入文件,没有问题,也没有字符丢失。
对于那些使用
Rattle
的人来说,这是我解决它的方法:
> library (rattle)
(如果还没有这样做)> crv$csv.encoding="latin1"
> rattle()
这对我有用,希望能帮助疲惫的旅行者
我在科学文章中遇到了类似的问题,并在这里找到了一个很好的解决方案: http://tm.r-forge.r-project.org/faq.html
通过使用以下代码行:
tm_map(yourCorpus, content_transformer(function(x) iconv(enc2utf8(x), sub = "byte")))
您将多字节字符串转换为十六进制代码。 我希望这会有所帮助。
如果您尝试导入 R 的文件最初是 Excel 文件。确保打开原始文件并另存为 csv,这在导入 R 时为我修复了这个错误。
我有同样的错误并尝试了以上所有无济于事。当我从 R 3.4.0 升级到 3.4.3 时,这个问题就消失了,所以如果你的 R 版本不是最新的,请更新它!
我最近遇到了这个错误(
invalid multibyte string 1
),但我的问题有点不同:
忘记保存一个带扩展名的csv.gz文件,尝试用
read_csv()
读取。添加扩展程序解决了问题。
R 的
read.csv()
如果需要一个数字,它会呕吐所有多字节字符。
我用的版本:
R version 4.2.1 (2022-06-23)
将此数据放入名为的文件中:
/tmp/foo.csv
#year,someval
2022,0.1389
2021,0.0000°
2020,0.2857
如果你仔细观察,你会看到第 2 行的
0.0000
值上面有一个“度”符号。
使用 read.csv 以这种方式加载它:
> read.csv('/tmp/foo.csv')
Error in type.convert.default(data[[i]], as.is = as.is[i], dec = dec, :
invalid multibyte string at '<b0>0'
Calls: read.csv -> read.table -> type.convert -> type.convert.default
Execution halted
cat
对那个废话有什么看法:
$ cat /tmp/foo.csv
#year,someval
2022,0.1389
2021,0.0000�
2020,0.2857
我们不容忍那个“度”符号。更改编码无济于事。您可以尝试告诉 read.csv 将所有内容解释为字符串,但现在您在下游遇到了字符串到数字的转换问题。
read.csv2 有什么要说的?:
> read.csv2('/tmp/foo.csv')
X.year.someval
1 2022,0.1389
2 2021,0.000\xb0
3 2020,0.2857
您是否使用复制粘贴来创建 CSV 文件?我遇到了同样的错误,并成功尝试了该线程中最流行的解决方案 (fileEncoding="latin1")。在我将数据框重新保存到 CSV 文件中后,我发现一些单元格在单元格值(编码为波浪号)之后有额外的空间。我删除了原始文件中的这些空格,并且能够在没有 fileEncoding="latin1" 并且没有任何错误的情况下读取它。