【问题标题】:Ruby 1.9 encoding with Excel CSVs使用 Excel CSV 进行 Ruby 1.9 编码
【发布时间】:2011-12-11 05:31:46
【问题描述】:

我有一些 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 编码?

【问题讨论】:

标签: ruby csv ruby-1.9


【解决方案1】:

如果您使用 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

然后您可以转换为 CSV::Table 或其他格式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2012-04-21
    相关资源
    最近更新 更多