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

Ruby/Rails Разбор CSV, неправильная последовательность байтов в UTF-8

Я пытаюсь разобрать CSV файл, созданный в электронной таблице Excel.

Вот мой код

require 'csv'
file = File.open("input_file")
csv = CSV.parse(file)

Но я получаю эту ошибку

ArgumentError: invalid byte sequence in UTF-8

Я думаю, что ошибка связана с тем, что Excel кодирует файл в ISO 8859-1 (Latin-1), а не в UTF-8

Может кто-нибудь помочь мне с обходным решением для этой проблемы, пожалуйста,

Спасибо заранее.

4b9b3361

Ответ 1

Вам нужно указать Ruby, что файл находится в ISO-8859-1. Измените открытую строку файла следующим образом:

file=File.open("input_file", "r:ISO-8859-1")

Второй аргумент говорит Ruby открывать только чтение с кодировкой ISO-8859-1.

Ответ 2

Вы можете указать исходное кодирование прямо в параметре режима файла:

CSV.foreach( "file.csv", "r:windows-1250" ) do |row|
   <your code>
end

Ответ 3

Укажите кодировку с опцией encoding:

CSV.foreach(file.path, headers: true, encoding:'iso-8859-1:utf-8') do |row|
  ...
end

Ответ 4

Сохраните файл в utf-8, если по какой-то причине вам не нужно сохранять его по-другому, и в этом случае вы можете указать кодированный набор при чтении файла

Ответ 5

добавить второй аргумент "r:ISO-8859-1" как File.open("input_file","r:ISO-8859-1" )

Ответ 6

У меня была такая же проблема, и я просто использовал электронные таблицы google, а затем загружал их как CSV. Это было самое простое решение.

Затем я наткнулся на этот камень

https://github.com/singlebrook/utf8-cleaner

Теперь мне вообще не нужно беспокоиться об этой проблеме. Надеюсь, это поможет!

Ответ 7

Если у вас есть только один (или несколько) файл, поэтому, когда нет необходимости автоматически объявлять кодировку для любого файла, полученного из ввода, и содержимое этого файла отображается в виде открытого текста (txt, csv и т.д.), Разделенного, например, точкой с запятой, Вы можете создать новый файл с расширением .csv вручную и вставить туда содержимое своего файла, а затем проанализировать его, как обычно.

Имейте в виду, что это обходной путь, но при необходимости разбора в linux только один большой файл Excel, преобразованный в некую разновидность csv, он экономит время на экспериментах со всеми этими причудливыми кодировками.