【问题标题】:Rails Import CSV Error: invalid byte sequence in UTF-8Rails 导入 CSV 错误:UTF-8 中的字节序列无效
【发布时间】:2016-01-08 16:12:57
【问题描述】:

我在我的 Rails 应用程序中尝试导入 CSV 文件时收到错误 invalid byte sequence in UTF-8。一切正常,直到我添加了一个 gsub 方法来将一个 CSV 列与我的数据库中的一个字段进行比较。

当我导入 CSV 文件时,我想检查每一行的地址是否包含在特定客户端的不同地址数组中。我有一个带有alt_addresses 属性的客户端模型,其中包含客户端地址的几种不同可能格式。

然后我有一个引用模型(如果您熟悉本地 SEO,您就会知道这个术语)。引文模型没有地址字段,但它有一个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

下面是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

我正在使用gsub 重新格式化 CSV 中的地址列以及我的客户端数据库表中的字段,以便我可以比较这两个值。这就是问题所在。添加gsub 方法后,我开始收到无效的字节序列错误。

我使用的是 Ruby 2.1.3。我注意到在 Stack Overflow 上搜索时发现的许多类似错误都与旧版本的 Ruby 有关。

【问题讨论】:

    标签: ruby-on-rails ruby csv ruby-on-rails-4 utf-8


    【解决方案1】:

    使用encoding 选项指定编码:

    CSV.foreach(file.path, headers: true, encoding: 'iso-8859-1:utf-8') do |row|
     # your code here
    end
    

    【讨论】:

      【解决方案2】:

      我想出解决此问题的一种方法是在 open office 或 libre office 上“另存为”,然后单击“编辑过滤器设置”,然后确保字符集为 UTF-8 并保存。最重要的是,在将字符加载到 ruby​​ 之前,使用一些外部工具将字符转换为 utf-8 兼容字符。这个问题在 ruby​​ 中可能是一个真正的迷宫

      一个名为 iconv 的 unix 工具显然可以做这种事情。 https://superuser.com/questions/588048/is-there-any-tools-which-can-convert-any-strings-to-utf-8-encoded-values-in-linu

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-20
        • 2012-01-12
        • 1970-01-01
        • 2011-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多