Файли 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. З файлом усе було гаразд — так вирішив імпорт. Більшість програм електронних таблиць дозволяють під час імпорту задати стовпцю текстовий тип, і це єдине надійне рішення.
Чому мій китайський текст спотворено?
Бо файл не повідомляє свого кодування, і програма, що його відкрила, вгадала інакше, ніж програма, що його записала. Збереження в UTF-8 з міткою порядку байтів змушує Excel прочитати його правильно ціною мітки, яку деякі інші інструменти показують як зайві символи.
Чи можна тут конвертувати CSV у PDF?
Так. Він розбирається як CSV, а не ділиться за комами, тож поля в лапках уціліють, а ширина стовпців залежить від вмісту, з жирним рядком заголовка. Ви отримуєте документ для читання й друку — у PDF нічого не можна сортувати чи підсумовувати.
А як щодо конвертації в Excel?
Не потрібно: будь-яка програма електронних таблиць напряму відкриває CSV, а попередня конвертація лише додає крок, на якому вгадуються типи. Конвертація, яка тут є, — у зворотному напрямку: PDF в Excel, що відтворює таблицю зі сторінки, яка її ніколи не записувала.