CSV库更改了Ruby哈希对象

CSV库更改了Ruby哈希对象,ruby,csv,ruby-1.9,Ruby,Csv,Ruby 1.9,我最近遇到了一个奇怪的问题: 在Ruby 1.9中,通过更新的CSV库,我定义了 options = {:headers => true, :col_sep => ';', :encoding => 'UTF-8'} 当我第一次将它作为参数传递给CSV.read时,它就可以正常工作了 但是,当我在下一行中同时使用另一个文件时,显然忽略了编码 因此,尽管这项工作应该如此: options = {:headers => true, :col_sep => ';', :

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

在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格式


现在,也许这不是一个错误;有谁能告诉我关于这种行为,是否有必要冻结选项哈希,或者是否有其他最佳做法?

这是一个bug。这是一个容易犯的错误

这个bug是针对即将发布的Ruby 1.9.3的

同时,您可以传递options.dup以避免CSV.read的副作用


CSV.generate和也存在同样的问题。

解决方法可能是传入选项。看起来CSV.read使用Hashdelete提取选项。