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发送?