Ruby on rails Rails导入CSV错误:UTF-8中的字节序列无效
尝试在Rails应用程序中导入CSV文件时,UTF-8中出现错误Ruby on rails Rails导入CSV错误:UTF-8中的字节序列无效,ruby-on-rails,ruby,csv,ruby-on-rails-4,utf-8,Ruby On Rails,Ruby,Csv,Ruby On Rails 4,Utf 8,尝试在Rails应用程序中导入CSV文件时,UTF-8中出现错误无效字节序列。一切正常,直到我添加了一个gsub方法,将其中一个CSV列与数据库中的一个字段进行比较 导入CSV文件时,我想检查每行的地址是否包含在特定客户端的不同地址数组中。我有一个带有alt_addresses属性的客户机模型,该属性包含几个不同的客户机地址格式 然后我有一个引用模型(如果你熟悉本地搜索引擎优化,你就会知道这个术语)。引用模型没有地址字段,但有一个nap\u correct?字段(nap代表“姓名”、“地址”、“
无效字节序列。一切正常,直到我添加了一个gsub
方法,将其中一个CSV列与数据库中的一个字段进行比较
导入CSV文件时,我想检查每行的地址是否包含在特定客户端的不同地址数组中。我有一个带有alt_addresses
属性的客户机模型,该属性包含几个不同的客户机地址格式
然后我有一个引用模型(如果你熟悉本地搜索引擎优化,你就会知道这个术语)。引用模型没有地址字段,但有一个nap\u correct?
字段(nap代表“姓名”、“地址”、“电话号码”)。如果CSV行的名称、地址和电话号码与我在该客户机数据库中的相同,则该引用的nap\u correct?
字段将设置为“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
下面是我的客户机模型中的alt\u 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
我正在使用gsub
重新格式化CSV中的地址列以及客户端数据库表中的字段,以便比较这两个值。这就是问题所在。我一添加gsub
方法,就开始出现无效字节序列错误
我正在使用Ruby 2.1.3。我注意到搜索堆栈溢出时发现的许多类似错误都与旧版本的Ruby有关。使用编码指定编码选项:
CSV.foreach(file.path, headers: true, encoding: 'iso-8859-1:utf-8') do |row|
# your code here
end
我想出的一种解决方法是在open office或libre office上“另存为”,然后单击“编辑过滤器设置”,然后确保字符集为UTF-8并保存。总之,在加载到ruby之前,使用一些外部工具将字符转换为utf-8兼容的字符。仅在ruby中,这个问题就可能是一个真正的f-ing迷宫
一个名为iconv的unix工具显然可以做这类事情