Я использую CSVMapper Gem для импорта некоторых записей в CSV-файле в модель Rails 3. (Я использовал этот драгоценный камень, потому что это то, что я нашел самый простой способ сделать это)
В любом случае, код, который я использую для импорта записей, следующий:
r = import('doc/socios_full.csv') do
map_to Associate
after_row lambda{|row, associate| associate.save }
start_at_row 1
[group,member,family_relationship_code,family_relationship_description,last_name,names,...]
#The previous line is actually longer, with more atts, but it's been cut to explain the example
end
И это работает очень хорошо, кроме случаев, когда парсер встречает некоторые неанглийские символы, такие как ó, é, ñ, í, °...
. Вот тогда я получаю следующую ошибку:
ArgumentError: invalid byte sequence in UTF-8
from /home/bcb/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/csv.rb:1831:in `sub!'
from /home/bcb/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/csv.rb:1831:in `block in shift'
from /home/bcb/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/csv.rb:1825:in `loop'
from /home/bcb/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/csv.rb:1825:in `shift'
from /home/bcb/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/csv.rb:1767:in `each'
from /home/bcb/.rvm/gems/ruby-1.9.2-p136/gems/csv-mapper-0.5.1/lib/csv-mapper.rb:106:in `each_with_index'
from /home/bcb/.rvm/gems/ruby-1.9.2-p136/gems/csv-mapper-0.5.1/lib/csv-mapper.rb:106:in `import'
from (irb):63
from /home/bcb/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.9/lib/rails/commands/console.rb:44:in `start'
from /home/bcb/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.9/lib/rails/commands/console.rb:8:in `start'
from /home/bcb/.rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.9/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
Я действительно уверен в этом, потому что, если я заменю все эти символы, проблема исчезнет, пока парсер не найдет другой неанглоязычный символ. Дело в том, что у меня есть файл с записями по 50 тыс., Поэтому поиск каждого символа, который я могу придумать, и попытка импортировать все эти записи каждый раз очень трудоемки.
Есть ли способ игнорировать эти ошибки и позволить анализатору продолжить работу? Или есть более простой способ импортировать этот файл CSV?