2013-03-28 41 views
0
當 「\ XC2」 錯誤

我的種子文件看起來像這樣...Rails的Seed.rb ncoding :: UndefinedConversionError:導入CSV

csv_file_path = 'db/coned.csv' 
count = 0 
CSV.foreach(csv_file_path) do |row| 
    row = Section.new({ 
    :supervisor => row[0], 
    :catagory => row[1], 
    :title => row[2], 
    :description=> row[3], 
    :days => row[4], 
    :start_date => row[5], 
    :end_date => row[6], 
    :start_time => row[7], 
    :end_time => row[8], 
    :course_id => row[9], 
    :room => row[10], 
    :building => row[11], 
    :location => row[12], 
    :tuition => row[13], 
    :lab_fee => row[14], 
    :insurance_fee => row[15], 
    :technology_fee => row[16] 
    }) 
    row.save! 
    puts "Added row #{count}" 
    count+=1 
end 

...當我運行耙分貝我得到這個錯誤:種子

耙中止! Encoding :: UndefinedConversionError:從ASCII-8BIT到UTF-8的「\ xC2」:INSERT INTO「sections」(「building」,「catagory」,「course_id」,「created_at」,「days」,「description」,「 END_DATE」, 「END_TIME」, 「insurance_fee」, 「lab_fee」, 「位置」, 「房間」, 「起始日期」, 「START_TIME」, 「監督員」, 「technology_fee」, 「標題」, 「交學費」, 「的updated_at」 )VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) /home/johnmlocklear/.rvm/ gem/ruby​​-1.9.2-p320/gems/activerecord-3.2.11/lib/active_record/connection_adapters/sqlite_adapter.rb:208:在encode' /home/johnmlocklear/.rvm/gems/ruby-1.9.2-p320/gems/activerecord-3.2.11/lib/active_record/connection_adapters/sqlite_adapter.rb:208:in type_cast'

任何有關我如何才能捕捉到這個錯誤和想法取出該行並繼續導入行。或者可能是某種強制編碼?

回答

1

顯示您的行與此默認值將不勝感激。

如果你想捕捉錯誤,用一些例外:

CSV.foreach(csv_file_path) do |row| 
    begin 
    row = Section.new({ 
     :supervisor => row[0], 
     .... 
     :technology_fee => row[16] 
    }) 
    row.save! 
    puts "Added row #{count}" 
    count+=1 
    rescue Exception 
    Rails.logger.error "Encountred error at line #{row.inspect}" 
    end 
end 
+0

感謝名單......那工作(那種)。添加rescure允許導入所有數據,因此它看起來像是錯誤,但在控制檯中看不到「#line row.inspect}中的」Encountred error「。我在想,如果我在這裏需要一個提示語句嗎? – Lumbee

+1

這取決於'誰'正在運行此代碼。如果你在控制檯運行它,用'$ stderr.puts'替換'Rails.logger.error'。 – pierallard

+0

..超過常規......有效! – Lumbee