В чем истинная разница между 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"
Не очень сложно. Он вставляет возврат каретки (hex 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, бесполезны, и использую столбец "сцепленных" функций, чтобы вручную создавать их самостоятельно.