我最近遇到了一个奇怪的问题:
在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
。
现在,也许这不是一个错误;任何人都可以告诉我这种行为,是否有必要冻结选项哈希,还是有其他最佳实践?
答案 0 :(得分:0)
这是一个错误。这是一个容易犯的错误,I blogged about Rails doing this in that past too。
对于即将发布的Ruby 1.9.3,这个错误是unwittingly fixed。
与此同时,您可以通过options.dup
来避免CSV.read
的副作用。
CSV.generate
和will be fixed for Ruby 1.9.3也存在同样的问题。