Masalah Anda bukan multiline tetapi CSV yang salah format.
Ganti \" dan akhiri spasi setelah akhir baris seperti ini:
require 'csv'
ml = %q{"id","name","address","email","potato"
1,"Bob","---
- 101 Cottage row
- Lovely Village
- \"\"
","example@sqldat.com","omnomnom"
2,"Charlie","---
- 102 Flame Street
- \"\"
- \"\"
","example@sqldat.com","andcheese"
4,"Doug","---
- 103 Dark Cave
- Next to some geo dude
- So many bats
","example@sqldat.com","usemeltattack"}
ml.gsub!(/\" \n/,"\"\n").gsub!(/\\\"/,"__")
CSV.parse(ml, {:headers=>true}) do |row|
puts row
end
Ini memberikan:
"id","name","address","email","potato"
1,"Bob","---
- 101 Cottage row
- Lovely Village
- ____
","example@sqldat.com","omnomnom"
etc
Jika Anda tidak memiliki kendali atas program yang mengirimkan CSV, Anda harus membuka file, membaca konten, melakukan penggantian, lalu mengurai CSV. Saya menggunakan __ di sini tetapi Anda dapat menggunakan karakter lain yang tidak bertentangan.