CSV库更改了Ruby哈希对象

时间:2011-07-20 09:09:18

标签: ruby csv ruby-1.9

我最近遇到了一个奇怪的问题:

在Ruby 1.9中,使用更新的CSV库,我定义了

options = {:headers => true, :col_sep => ';', :encoding => 'UTF-8'}

第一次将它作为参数传递给CSV.read。

但是当我在下一行同时执行另一个文件时,编码显然会被忽略!

所以虽然这应该有效:

options = {:headers => true, :col_sep => ';', :encoding => 'UTF-8'}
stockdata   = CSV.read('CurrentStock_1.csv', options)
auctiondata = CSV.read('Export_auktion_ebay-einstellungen.csv', {:headers => true, :col_sep => ';', :encoding => 'UTF-8'})

我不能像这样快捷:

options = {:headers => true, :col_sep => ';', :encoding => 'UTF-8'}
stockdata   = CSV.read('CurrentStock_1.csv', options)
auctiondata = CSV.read('Export_auktion_ebay-einstellungen.csv', options)

auctiondata然后全部在ASCII-8Bit

现在,也许这不是一个错误;任何人都可以告诉我这种行为,是否有必要冻结选项哈希,还是有其他最佳实践?

1 个答案:

答案 0 :(得分:0)

这是一个错误。这是一个容易犯的错误,I blogged about Rails doing this in that past too

对于即将发布的Ruby 1.9.3,这个错误是unwittingly fixed

与此同时,您可以通过options.dup来避免CSV.read的副作用。

CSV.generatewill be fixed for Ruby 1.9.3也存在同样的问题。