【问题标题】:reading header from a UTF8 CSV file using Ruby使用 Ruby 从 UTF8 CSV 文件中读取标头
【发布时间】:2012-12-28 09:58:02
【问题描述】:

我正在尝试在 Ruby 1.9.3 中读取 CSV 文件(我没有使用 Rails。)

sessions = CSV.read("c:/scripts/ruby/testcsvencoding.csv", :headers => true, 
:encoding => "UTF-8") 

sessions.each do | session |
  p session['col1']    <-- does not work
  p session[0]   <--- works
end

文件包含:

col1, col2
a,1
b,2

我看到看起来像Avoding “Invalid byte sequence in UTF-8″ with Ruby and CSV files”,但它可能与我的问题不同。

当我尝试解决方法时出现错误。

有没有办法解决这个问题?这是一个已知问题吗?

这是在 Windows 上

【问题讨论】:

  • 这在我的 OS X 机器上工作得很好,也许这是 Windows 上 Ruby 的一个错误?确切的错误是什么?
  • 你把csv文件保存为utf8了吗

标签: ruby


【解决方案1】:

该错误意味着您的数据中存在错误的 utf-8 字节序列。如果这让您感到困扰,请修复数据。否则试试 ascii-8bit。

【讨论】:

  • 不确定我是否沟通有误。我没有收到错误。如果我使用 session['col1'] 引用第一列,它就不起作用。第二列和其他工作正常。对于第一列,我需要使用 session[0],即我不能使用列名
  • 好的,但如果你的数据如你所愿,代码就可以工作。因此,您的数据有问题。
  • 一个 utf8 文件在文件开头添加了一些额外的字节。我认为结果是 ruby​​/csv 误解了第一列的名称。这不是我的数据的问题,我可以用任何数据重现它。
  • 不,这根本不是真的。
  • 也是真的!!请参阅:en.wikipedia.org/wiki/… 我还意识到我可以在没有 BOM 的情况下保存文件。之后阅读工作。顺便说一句,我可能是错的。
猜你喜欢
  • 2010-10-28
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
相关资源
最近更新 更多