Подтвердить что ты не робот

Недопустимая многобайтовая строка в 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, но получил одно и то же сообщение "недопустимое многобайтовое строковое сообщение" в каждом случае. Есть ли другая кодировка, которая должна использоваться, или есть какая-то другая проблема?

4b9b3361

Ответ 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 может импортировать файл без проблем и без потери символов.