Ruby CSV+;西班牙语字符:编码::未定义的转换器错误

Ruby CSV+;西班牙语字符:编码::未定义的转换器错误,ruby,csv,Ruby,Csv,当我尝试将send_data与包含西班牙语字符的CSV一起使用时,从UTF-8到ISO-8859-1出现了一个错误U+2014: 型号: def self.books_data(books) csv = CSV.generate(:col_sep => "|", quote_char: '"') do |csv| ... end csv end 控制器: def export_data ... data = CsvGenerator.books_data(@b

当我尝试将
send_data
与包含西班牙语字符的CSV一起使用时,从UTF-8到ISO-8859-1出现了一个错误
U+2014:

型号:

def self.books_data(books)
  csv = CSV.generate(:col_sep => "|", quote_char: '"') do |csv|
    ...
  end
  csv
end
控制器:

def export_data
  ...
  data = CsvGenerator.books_data(@books)
  send_data(data.encode("iso-8859-1"), filename: "books_data_#{date}.csv", type: 'text/csv; charset=iso-8859-1; header=present') #<-- error occurs here
end
def导出_数据
...
data=CsvGenerator.books\u data(@books)
send_data(data.encode(“iso-8859-1”),文件名:“books_data{date}.csv”,键入:“text/csv;charset=iso-8859-1;header=present”)#字符串#强制编码
不应使用,因为它只是用不同编码“标记”字符串,而
编码
进行实际转换

出现此错误的原因是,
数据中的某个地方有一个\u2014字符:“-”。正如
字符串#encode
文档所述:

raise Encoding::目标编码中未定义的字符的UndefinedConversionError[…]

如果您检查iso映射(),则没有“-” 8859-1中的字符。所以要解决这个问题,您需要从
数据中删除那些“无效”字符

除此之外,除非有特殊原因,否则应该避免此类转换,并让CSV以utf-8编码生成


你能试试
发送数据(data.encode(“iso-8859-1”),文件名:“books\u data”{date}.csv”,键入:'text/csv;charset=iso-8859-1;header=present',{:无效=>:replace,:未定义=>:replace,:replace=>'?})
它说语法错误。我想它在无效的
{}
周围的括号里。我删除了它们并再次尝试,没有语法错误,但当我试图生成文件hey@zrl3dx时,错误仍然出现。我半修复了它。对第二个问题有什么建议吗?我想这是开放办公室的问题。当我在日志中打印该字符串时,它会打印出来。您将其编码为iso-8859-1有什么原因吗?您是否可以将响应作为UTF-8发送?