Eli*_*Eli 5 ruby csv ruby-on-rails utf-8 ruby-on-rails-4
invalid byte sequence in UTF-8尝试在我的Rails应用程序中导入CSV文件时出现错误.一切都运行良好,直到我添加了一个gsub方法来比较其中一个CSV列到我的数据库中的字段.
当我导入CSV文件时,我想检查每行的地址是否包含在特定客户端的不同地址的数组中.我有一个客户端模型,alt_addresses其中包含一些属性,其中包含客户端地址的几种不同格式.
然后我有一个引用模型(如果你熟悉本地搜索引擎优化你会知道这个术语).引文模型没有地址字段,但它有一个nap_correct?字段(NAP代表"名称","地址","电话号码").如果CSV行的名称,地址和电话号码与我在该客户端的数据库中的名称,地址和电话号码相同,则nap_correct?该引用的字段将设置为"正确".
以下是import我的引文模型中的方法:
def self.import(file, client_id)
@client = Client.find(client_id)
CSV.foreach(file.path, headers: true) do |row|
@row = row.to_hash
@citation = Citation.new
if @row["Address"]
if @client.alt_addresses.include?(@row["Address"].to_s.downcase.gsub(/\W+/, '')) && self.phone == @row["Phone Number"].gsub(/[^0-9]/, '')
@citation.nap_correct = true
end
end
@citation.name = @row["Domain"]
@citation.listing_url = @row["Citation Link"]
@citation.save
end
end
Run Code Online (Sandbox Code Playgroud)
然后,这是alt_addresses我的客户端模型中的属性:
def alt_addresses
address = self.address.downcase.gsub(/\W+/, '')
address_with_zip = (self.address + self.zip_code).downcase.gsub(/\W+/, '')
return [address, address_with_zip]
end
Run Code Online (Sandbox Code Playgroud)
我正在使用gsub重新格式化CSV中的地址列以及客户端数据库表中的字段,以便我可以比较这两个值.这就是问题所在.一旦我添加了gsub方法,我就开始得到无效的字节序列错误.
我正在使用Ruby 2.1.3.我注意到很多类似的错误,我发现搜索Stack Overflow与旧版本的Ruby有关.
K M*_*lam 16
使用encoding选项指定编码:
CSV.foreach(file.path, headers: true, encoding: 'iso-8859-1:utf-8') do |row|
# your code here
end
Run Code Online (Sandbox Code Playgroud)