我有一个简单的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
(我猜)......
答案 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