用excelcsvs进行Ruby 1.9编码

用excelcsvs进行Ruby 1.9编码,ruby,csv,ruby-1.9,Ruby,Csv,Ruby 1.9,我有一些Ruby脚本,它读取一些CSV文件,处理它们,然后写出一组(新的)CSV文件。我正在使用Ruby 1.9.2和新的标准“csv”gem(以前是FasterCSV)。源CSV文件包含非ascii字符(等),但它们来自Excel,因此编码未正确标注。具体地说,当我将文件加载到ruby中时,我得到以下结果: require 'csv' t = CSV.table('file.csv',:converters=>nil) t.to_s.encoding # encoding is ASCI

我有一些Ruby脚本,它读取一些CSV文件,处理它们,然后写出一组(新的)CSV文件。我正在使用Ruby 1.9.2和新的标准“csv”gem(以前是FasterCSV)。源CSV文件包含非ascii字符(等),但它们来自Excel,因此编码未正确标注。具体地说,当我将文件加载到ruby中时,我得到以下结果:

require 'csv'
t = CSV.table('file.csv',:converters=>nil)
t.to_s.encoding
# encoding is ASCII-8BIT
即使实际字符串是UTF-8。我的问题是,我似乎无法获取这个字符串,它被标记为ASCII以实际转换为UTF-8。当我尝试这个:

require 'csv'
t = CSV.table('file.csv',:converters=>nil)
f = File.new('output.csv','w:utf-8')
f.write(t.to_s.force_encoding('utf-8'))
f.close

输出文件仍以ASCII编码的形式列出。要将输出文件编码为UTF-8,我需要做些什么?

如果您使用Mac Excel输出的文件实际上是MacRoman编码的,下面的代码可能不是最好的方式,但它可以工作

rows = []
CSV.foreach("../yourfile.csv", col_sep: ",", encoding: "MacRoman") do |row|
  rows << row.map! {|v| v.encode("UTF-8") unless v == nil } 
end
行=[]
foreach(“../yourfile.CSV”,col_sep:,”,编码:“MacRoman”)do |行|

请看这个讨论:希望这个能帮助你。@WarHog谢谢,这正是我要找的。