Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails导入CSV错误:UTF-8中的字节序列无效_Ruby On Rails_Ruby_Csv_Ruby On Rails 4_Utf 8 - Fatal编程技术网

Ruby on rails 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代表“姓名”、“地址”、“

尝试在Rails应用程序中导入CSV文件时,UTF-8中出现错误
无效字节序列。一切正常,直到我添加了一个
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工具显然可以做这类事情