Спецификация CSV - это та, которую я нахожу реализованной многими различными способами ... в принципе кажется, что это лишь половина скорости, что разочаровывает, учитывая ее популярность.
Включение нового-линии в пределах ячейки в CSV-ячейке может потребоваться обернуть ячейку или экранировать новую строку.В связанном документе вы заметите, что есть три способа сделать это - и разные программы обрабатывают это по-разному:
- Excel заключает всю ячейку в двойные кавычки: ячейка может иметь (неэкранированные) символы новой строкивнутри нее и считается отдельной ячейкой, если она заключена в двойные кавычки (обратите внимание также, что вам нужно использовать двойные кавычки в стиле Excel, экранирующие содержимое ячейки)
- Другие программы вставляют одну обратную косую черту передсимвол, поэтому строка, оканчивающаяся на
\
, считается не концом строки, а символом новой строки в ячейке.В ячейке могут быть символы неэкранированной новой строки, если им предшествует символ обратной косой черты. - Другие по-прежнему заменяют символ новой строки на экранирование символов в стиле C, фактическую последовательность символов
\n
или \r\n
.В этом случае в ячейке полностью экранированы символы новой строки.
Проблема усугубляется потенциальной необходимостью экранирования управляющих символов (а также другого содержимого (например, "
в # 1 и \
в # 2 + 3) и различные стили экранирования (например, встроенная кавычка может быть экранирована как: двойная двойная кавычка ""
или обратная косая черта-двойная кавычка \"
)
Мой совет: сгенерируйте документ open-office с несколькими строками и escape-символами ключа и посмотрите, как open-office генерирует файл CSV
.В этом разделе вы можете выбрать, какой из перечисленных выше методов использовать для перехода на новую строку внутри ячеек, а какой экранировать.method.
пример стиля-1 (excel):
#num,str,num
1,"Hello
World",1990
2,"Yes",1991
пример стиля-2:
#num,str,num
1,Hello \
Word,1990
2,Yes,1991
пример стиля-3:
#num,str,num
1,Hello \nWorld,1990
2,Yes,1991