Ruby on rails UTF-8 CSV Rails 4中的字节序列无效

Ruby on rails UTF-8 CSV Rails 4中的字节序列无效,ruby-on-rails,ruby,csv,resque,Ruby On Rails,Ruby,Csv,Resque,我得到: ArgumentError invalid byte sequence in UTF-8 使用我的Resque作业 下面是我的堆栈跟踪: C:/BitNami/rubystack-2.0.0-4/ruby/lib/ruby/2.0.0/csv.rb:1780:in `sub!' C:/BitNami/rubystack-2.0.0-4/ruby/lib/ruby/2.0.0/csv.rb:1780:in `block in shift' C:/BitNami/rubystack-2.

我得到:

ArgumentError invalid byte sequence in UTF-8
使用我的
Resque
作业

下面是我的堆栈跟踪:

C:/BitNami/rubystack-2.0.0-4/ruby/lib/ruby/2.0.0/csv.rb:1780:in `sub!'
C:/BitNami/rubystack-2.0.0-4/ruby/lib/ruby/2.0.0/csv.rb:1780:in `block in shift'
C:/BitNami/rubystack-2.0.0-4/ruby/lib/ruby/2.0.0/csv.rb:1774:in `loop'
C:/BitNami/rubystack-2.0.0-4/ruby/lib/ruby/2.0.0/csv.rb:1774:in `shift'
C:/BitNami/rubystack-2.0.0-4/ruby/lib/ruby/2.0.0/csv.rb:1716:in `each'
C:/BitNami/rubystack-2.0.0-4/ruby/lib/ruby/2.0.0/csv.rb:1730:in `to_a'
C:/BitNami/rubystack-2.0.0-4/ruby/lib/ruby/2.0.0/csv.rb:1730:in `read'
C:/BitNami/rubystack-2.0.0-4/ruby/lib/ruby/2.0.0/csv.rb:1291:in `parse'
C:/BitNami/rubystack-2.0.0-4/projects/virtual_exhibition/app/jobs/users.rb:14:in `parse_csv'
C:/BitNami/rubystack-2.0.0-4/projects/virtual_exhibition/app/jobs/users.rb:6:in `perform'
C:/BitNami/rubystack-2.0.0-4/ruby/lib/ruby/gems/2.0.0/gems/resque-status-0.4.2/lib/resque/plugins/status.rb:161:in `safe_perform!'
C:/BitNami/rubystack-2.0.0-4/ruby/lib/ruby/gems/2.0.0/gems/resque-status-0.4.2/lib/resque/plugins/status.rb:137:in `perform'
下面是我接到电话的工作

class UserJob
  include Resque::Plugins::Status

  def perform
    puts "Parsing CSV and updating..."
    parse_csv
    puts "Update finished..."
  end

  def parse_csv
    @counter = 0 
    @row = []
    csv_text = File.read("#{Rails.public_path}/careersfair.csv").encode('UTF-8')
    csv = CSV.parse(csv_text, headers: false)
    csv.each do |row|
      user = User.find_by_email row[3]
      puts user.inspect
      if user.present?
        user.update(:first_name => row[0], :last_name => row[1], :industry => row[2], :event_ids => 1, :skip_invitation => true) 
        puts @counter += 1
      else
        puts "Not found - #{row[3]}"
      end
    end
  end
end
似乎
CSV.parse
失败了


发生这种情况的原因是什么?

我认为您的csv文件中有一些无效字符。将“csv_文本”更改为以下行

csv_text = File.read("#{Rails.public_path}/careersfair.csv")encode("UTF-8", invalid: :replace, undef: :replace, replace: "?")
如果你不能用这种方法解决这个问题,我假设csv文件不是UTF-8

如果您在Linux上,请尝试
file-i filename.txt
。您可以看到文件的编码

require "iconv"
conv = Iconv.new("UTF-8//IGNORE","ENCODING_OF_YOUR_FILE")
csv_text = File.read("#{Rails.public_path}/careersfair.csv")
text = conv.iconv(csv_text)

文件
careersfair.csv
?csv_text=
file.read(“{Rails.public_path}/careersfair.csv”)。编码!('UTF-8','binary',无效::替换,未定义::替换,替换:“”)