gpt4 book ai didi

使用 Excel CSV 的 Ruby 1.9 编码

转载 作者:数据小太阳 更新时间:2023-10-29 08:05:47 24 4
gpt4 key购买 nike

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

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

关于使用 Excel CSV 的 Ruby 1.9 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7826882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com