Это старый поток, но я столкнулся с этой проблемой, и я решил ее с помощью регулярного выражения, чтобы вы могли избежать библиотеки только для этого. Здесь код написан на PHP, но его можно адаптировать к другому языку.
$parsedCSV = preg_replace('/(,|\n|^)"(?:([^\n"]*)\n([^\n"]*))*"/', '$1"$2 $3"', $parsedCSV);
Это решение предполагает, что поля, содержащие разрыв строки, заключены в двойные кавычки, что, по-видимому, является допустимым предположением, по крайней мере для того, что я видел до сих пор. Кроме того, двойные кавычки должны следовать за ,
или помещаться в начале новой строки (или первой строки).
Пример:
field1,"field2-part1\nfield2-part2",field3
Здесь \ n заменяется пробелом, поэтому результат будет:
field1,"field2-part1 field2-part2",field3
Регулярное выражение также должно обрабатывать несколько разрывов строк.
Это может быть неэффективно, если содержимое слишком велико, но может помочь во многих случаях, и идею можно использовать повторно, возможно, оптимизировать, выполняя это для небольших кусков (но вам придется обрабатывать сокращения с исправлением размер буферизован).