Недопустимая многобайтовая строка в 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, но получил одно и то же сообщение "недопустимое многобайтовое строковое сообщение" в каждом случае. Есть ли другая кодировка, которая должна использоваться, или есть какая-то другая проблема?
Ответы
Ответ 1
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=""))))
Ответ 2
Возможно, вы столкнулись с этой проблемой из-за несовместимости системного языкового стандарта. Попробуйте установить системный языковой стандарт с этим кодом Sys.setlocale("LC_ALL", "C")
Ответ 3
Может быть полезен пакет readr из tidyverse universe.
Вы можете установить кодировку через локальный аргумент функции 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"))
Ответ 4
Для тех, кто использует Rattle
с этой проблемой Вот как я его решил:
- Сначала убедитесь, что вы покинули погремушку, поэтому вы в командной строке R
-
> library (rattle)
(если этого еще не сделано)
-
> crv$csv.encoding="latin1"
-
> rattle()
- Теперь вы сможете продолжить. т.е. импортируйте свои csv > Execute > Model > Execute и т.д.
Это сработало для меня, надеюсь, что помогает утомленному путешественнику
Ответ 5
У меня была аналогичная проблема с научными статьями и я нашел хорошее решение здесь:
http://tm.r-forge.r-project.org/faq.html
Используя следующую строку кода:
tm_map(yourCorpus, content_transformer(function(x) iconv(enc2utf8(x), sub = "byte")))
вы конвертируете многобайтовые строки в шестнадцатеричный код.
Надеюсь, это поможет.
Ответ 6
Если файл, который вы пытаетесь импортировать в R, который первоначально был файлом Excel. Убедитесь, что вы открыли исходный файл и сохранили как csv, и это исправило эту ошибку для меня при импорте в R.
Ответ 7
У меня была такая же ошибка, и все вышеперечисленные попытки были безрезультатны. Эта проблема исчезла, когда я обновил R 3.4.0 до 3.4.3, поэтому, если ваша версия R не устарела, обновите ее!
Ответ 8
Самое простое решение, которое я нашел для этой проблемы, без потери каких-либо данных/специальных символов (например, при использовании fileEncoding="latin1"
таких как знак евро €, будет потеряно), - это сначала открыть файл в текстовом редакторе, таком как Sublime Text, и "Сохранить с кодировкой - UTF-8".
Затем R может импортировать файл без проблем и без потери символов.