CSV.foreach(filename, encoding: "Shift_JIS:UTF-8") do |row|
# …
end
だが、未定義文字があるとエラーに。
Kernel#open
だと
open(filename, "rb:Shift_JIS:UTF-8", undef: :replace) do |f|
# …
end
のように、String#encode
と同じオプションが渡せるが、CSV ではここにオプションを渡すすべはない。
よって Kernel#open
と併用する。
open(filename, "rb:Shift_JIS:UTF-8", undef: :replace) do |f|
CSV.new(f).each do |row|
# ...
end
end