Ответ 1
Вам нужно указать Ruby, что файл находится в ISO-8859-1. Измените открытую строку файла следующим образом:
file=File.open("input_file", "r:ISO-8859-1")
Второй аргумент говорит Ruby открывать только чтение с кодировкой ISO-8859-1.
Я пытаюсь разобрать 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
Может кто-нибудь помочь мне с обходным решением для этой проблемы, пожалуйста,
Спасибо заранее.
Вам нужно указать Ruby, что файл находится в ISO-8859-1. Измените открытую строку файла следующим образом:
file=File.open("input_file", "r:ISO-8859-1")
Второй аргумент говорит Ruby открывать только чтение с кодировкой ISO-8859-1.
Вы можете указать исходное кодирование прямо в параметре режима файла:
CSV.foreach( "file.csv", "r:windows-1250" ) do |row|
<your code>
end
Укажите кодировку с опцией encoding
:
CSV.foreach(file.path, headers: true, encoding:'iso-8859-1:utf-8') do |row|
...
end
Сохраните файл в utf-8, если по какой-то причине вам не нужно сохранять его по-другому, и в этом случае вы можете указать кодированный набор при чтении файла
добавить второй аргумент "r:ISO-8859-1"
как File.open("input_file","r:ISO-8859-1" )
У меня была такая же проблема, и я просто использовал электронные таблицы google, а затем загружал их как CSV. Это было самое простое решение.
Затем я наткнулся на этот камень
https://github.com/singlebrook/utf8-cleaner
Теперь мне вообще не нужно беспокоиться об этой проблеме. Надеюсь, это поможет!
Если у вас есть только один (или несколько) файл, поэтому, когда нет необходимости автоматически объявлять кодировку для любого файла, полученного из ввода, и содержимое этого файла отображается в виде открытого текста (txt, csv и т.д.), Разделенного, например, точкой с запятой, Вы можете создать новый файл с расширением .csv
вручную и вставить туда содержимое своего файла, а затем проанализировать его, как обычно.
Имейте в виду, что это обходной путь, но при необходимости разбора в linux только один большой файл Excel, преобразованный в некую разновидность csv, он экономит время на экспериментах со всеми этими причудливыми кодировками.