В чем истинная разница между Excel CSV и стандартным CSV?
Например, при обработке столбцов с разрывами строк внутри одной ячейки, как они по-разному кодируют ее?
В чем истинная разница между Excel CSV и стандартным CSV?
Например, при обработке столбцов с разрывами строк внутри одной ячейки, как они по-разному кодируют ее?
Ответы:
Это абсолютно зависит от того, что вы определяете как «стандартный» CSV. Насколько мне известно, Excel следует правилам, изложенным в RFC 4180 , «Общий формат и тип MIME для файлов CSV».
Рассмотрим таблицу, в которой первая ячейка в первой строке имеет два переноса строк. В Excel это будет выглядеть следующим образом:
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | col1, line1a | | |
| | col1, line1b | | |
| | col1, line1c | col2, row1 | col3, row1 |
| 2 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Теперь, как Excel экспортирует это? Давайте посмотрим - текстовый редактор будет отображать это:
"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"
Не очень сложный. Он вставляет возврат каретки (шестнадцатеричный 0D
), где разрыв строки был в нашей ячейке. Каждая клетка окружена двойными кавычками. Кроме того, фактические строки разделяются символом возврата каретки.
Чтобы правильно проанализировать это, парсер CSV должен
Если бы этого не произошло, вы бы получили что-то вроде искаженного текста. Обратите внимание, что теперь вместо двух есть четыре строки , потому что не удалось игнорировать разрывы строк.
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | "col1, line1a | | |
| 2 | col1, line1b | | |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Но давайте посмотрим, что говорит RFC, может быть, Excel сделал все правильно?
Поля, содержащие разрывы строк (CRLF), двойные кавычки и запятые, должны быть заключены в двойные кавычки.
Аккуратно, это именно то, что сделал Excel. Подводя итог, можно сказать, что Excel следует рекомендациям «стандартного» CSV-файла. При наличии правильного синтаксического анализатора CSV он также должен иметь возможность читать файлы Excel CSV.
Насколько я понял из оригинальной реализации CSV, все текстовые поля были заключены в кавычки, а цифры не должны быть. Excel не делает этого, и если вы попытаетесь загрузить сгенерированные в Excel файлы csv на платформы, не принадлежащие Microsoft, они потерпят неудачу. Это стандартный подход Microsoft, игнорирующий взаимодействие и сосредоточенный на слепом следовании правилам. Аналогичная ситуация произошла с IE, они правильно следовали правилам html / css для атрибутов padding и margin и игнорировали тот факт, что каждая существующая веб-страница и веб-браузер обрабатывали их по-разному. В результате почти каждая веб-страница теперь имеет специальные правила для IE. Я считаю, что файлы csv, созданные в Excel, бесполезны и использую столбец «сцепленных» функций, чтобы самостоятельно создавать их вручную.