Перейти к содержимому
Convertube

Файлы CSV: формат без типов, без кодировки и без комитета

Что такое CSV на самом деле, почему один файл по-разному открывают две программы и что говорят правила кавычек. Конвертируйте CSV в браузере, без загрузки.

Кратко

Тип
Документы
Расширения
.csv
MIME-тип
text/csv

Файл .csv — это текстовый файл. В нём нет заголовка, версии, сведений о типах и ничего двоичного — откройте его в Блокноте, и вы увидите каждый его байт. Каждая строка — это строка таблицы, и что-то разделяет поля. Это весь формат, и именно поэтому его может записать что угодно и поэтому никакие две программы не согласны в том, что он означает.

Подробнее

Двадцать пять лет у него не было спецификации. RFC 4180 появился в 2005 году и прямо имеет статус информационного документа, а не стандарта: он описывает, что делает большинство реализаций, а не предписывает, что делать. Зато он определяет кавычки: поле, содержащее разделитель, кавычку или перенос строки, заключается в двойные кавычки, а кавычка внутри такого поля записывается дважды. Именно это правило решает, будет «Widget, large» одной ячейкой или двумя, и именно его пропускают наивные парсеры.

Разделитель — не всегда запятая. Таблица, работающая в локали, где десятичные дроби пишутся как 1,5, не может использовать запятую ещё и для разделения полей, поэтому Excel там экспортирует точку с запятой — на том же компьютере, из того же меню, создавая файл, который не откроют в соседней стране. Выгрузки из баз данных часто используют табуляцию. Любой инструмент, который хорошо читает CSV, угадывает разделитель по первым нескольким строкам — так делает и этот сайт.

Нет и объявления кодировки — и вот здесь данные действительно теряются. CSV с китайскими именами, сохранённый одной программой и открытый другой, превращается в «кракозябры», потому что одна считала, что это UTF-8, а другая — системная кодовая страница. А поскольку каждое поле — это текст без типа, таблица при импорте угадывает заново: ведущие нули пропадают из артикулов, длинные идентификаторы превращаются в экспоненциальную запись, а всё, что похоже на дату, становится датой. С файлом всё было в порядке; неправильно было его прочтение.

Конвертировать CSV в другие форматы

Вопросы и ответы: CSV

CSV — это просто текстовый файл?

Да, целиком. Ни контейнера, ни сжатия, ничего двоичного. Его открывает любой текстовый редактор, и то, что вы видите, — это всё, что в нём есть.

Почему в моём CSV точка с запятой?

Потому что он был выгружен в локали, где запятая — десятичный разделитель, и поэтому не могла одновременно разделять поля. Это всё равно CSV, и любая достойная программа для чтения определяет разделитель, а не предполагает его.

Почему пропали ведущие нули?

Потому что CSV не хранит типов, и таблица угадала. «007» похоже на число, поэтому стало 7. С файлом всё было в порядке — так решил импорт. Большинство табличных программ позволяют при импорте задать столбцу текстовый тип, и это единственное надёжное решение.

Почему мой китайский текст превратился в мешанину?

Потому что файл никак не сообщает свою кодировку, и программа, которая его открывает, угадала иначе, чем программа, которая его записала. Чтобы Excel прочитал файл правильно, его нужно сохранить в UTF-8 с меткой порядка байтов (BOM) — ценой метки, которую некоторые другие программы показывают как лишние символы.

Можно ли здесь конвертировать CSV в PDF?

Да. Файл разбирается как CSV, а не просто делится по запятым, так что поля в кавычках сохраняются, а столбцы подгоняются по ширине содержимого, со строкой заголовков жирным шрифтом. Результат предназначен для чтения и печати — в PDF ничего нельзя ни отсортировать, ни сложить.

А конвертация в Excel?

Не нужна: любая табличная программа открывает CSV напрямую, а предварительная конвертация лишь добавляет ещё один шаг, на котором угадываются типы. Здесь есть конвертация в обратном направлении — PDF в Excel, которая восстанавливает таблицу со страницы, где она никогда не была записана как таблица.