关于从CSV导入的操作之前

时间:2014-04-12 10:47:56

标签: ruby-on-rails csv ruby-on-rails-4 import character-encoding

我有一个简单的CSV导入,其中提供的文件已经被破坏(UTF字符)(德语)。

例如:该清单有:

G%C3%B6tterbote

正确的名称应该是

Götterbote

我正在尝试在导入CSV时强制进行编码。

我的导入操作

  def import
    Player.import(params[:file])
    redirect_to players_path, notice: "Players Imported successfully"
  end

我的导入方法

  def self.import(file)
    SmarterCSV.process(file.path) do |row|
      Player.create(row.first)
    end
  end

我发现这会成功转换String,但无法成功实现:

 u = "G%C3%B6tterbote"
   => "G%C3%B6tterbote" 

 u1 = CGI::unescape(u).force_encoding('UTF-8')
    => "Götterbote"  

所以基本上我需要像before_action(我猜)......

1 个答案:

答案 0 :(得分:1)

您之前不需要采取行动。

你需要一个预先考试者,实际上你需要预先进行自我预测。

您的CSV随附列。第0,1,2,3列等(因为您不使用标题)。

因此,对于您的文本列,我们为了示例列1,3,5而调用它们。

def self.import(file)
    text_cols=[1,3,5] #for example
    SmarterCSV.process(file.path) do |row|
        text_cols.each do |column|
            row[column]=CGI::unescape(row[column]).force_encoding('UTF-8')
        end
        Player.create(row)
    end
end

或者简单地说,就你的具体情况而言:

def self.import(file)
    SmarterCSV.process(file.path) do |row|
        row.first=CGI::unescape(row.first).force_encoding('UTF-8')
        Player.create(row.first)
    end
end