[英]invalid byte sequence in UTF-8 CSV Rails 4
I'm getting: 我越来越:
ArgumentError invalid byte sequence in UTF-8
With my Resque
job 与我的
Resque
工作
Below is my stack trace: 以下是我的堆栈跟踪:
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'
Also below is my job getting called 下面也是我的工作被称为
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
It seems CSV.parse
is failing. 似乎
CSV.parse
失败。
Is there a reason why this is happening? 有这种情况发生的原因吗?
I think your csv file has some invalid characters. 我认为您的csv文件包含一些无效字符。 Change "csv_text" into the follwing line.
将“ csv_text”更改为以下一行。
csv_text = File.read("#{Rails.public_path}/careersfair.csv")encode("UTF-8", invalid: :replace, undef: :replace, replace: "?")
If you couldn't solve that by this way, I assume the csv file is not UTF-8. 如果您无法通过这种方式解决该问题,那么我认为csv文件不是UTF-8。
If you're on Linux, try file -i filename.txt
. 如果您使用的是Linux,请尝试使用
file -i filename.txt
。 You can see encoding of the file. 您可以看到文件的编码。
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.