首页 > 解决方案 > Rails 解析 csv 分隔符 ¦

问题描述

我有奇怪格式的 csv 文件

2783¦Larson and Sons
967¦Becker Group
333¦Rolfson LLC

我试过这样做

CSV.foreach("#{Rails.root}/csv_files/suppliers.csv") do |supplier|
  p supplier[0]
end

但有一个字符串"2783¦Larson and Sons"

如何区分值?例如将返回

supplier[0] #=> "2783"
supplier[1] #=> "Larson and Sons"

标签: ruby-on-railsrubycsvparsing

解决方案


为什么你会期望CSV知道如何处理这种奇怪的输入?您应该明确指定编码和列分隔符。

CSV.read("#{Rails.root}/csv_files/suppliers.csv",
      encoding: Encoding::ISO_8859_1,
      col_sep: "\xC2\xA6".force_encoding(Encoding::ISO_8859_1)) do |supplier|
  puts supplier.inspect
end
#⇒ [["2783", "Larson and Sons"],
#   ["967", "Becker Group"],
#   ["333", "Rolfson LLC"]]

推荐阅读