Przejdź do treści
Convertube

Pliki CSV: format bez typów, bez kodowania i bez komitetu

Czym naprawdę jest CSV, czemu ten sam plik otwiera się inaczej w dwóch arkuszach i co mówią zasady cudzysłowów. Konwertuj CSV w przeglądarce, bez wysyłania.

W skrócie

Typ
Dokumenty
Rozszerzenia
.csv
Typ MIME
text/csv

Plik .csv to plik tekstowy. Nie ma nagłówka, wersji, informacji o typach ani niczego binarnego — otwórz go w Notatniku, a zobaczysz każdy jego bajt. Każda linia to wiersz, a coś oddziela pola. To cały format, dlatego wszystko potrafi go zapisać i dlatego żadne dwa programy nie zgadzają się, co znaczy.

Czytaj dalej

Przez dwadzieścia pięć lat nie miał specyfikacji. RFC 4180 pojawiło się w 2005 roku i jest wyraźnie informacyjne, a nie standardem — opisuje, co robi większość implementacji, zamiast komukolwiek coś narzucać. Rozstrzyga natomiast cudzysłowy: pole zawierające separator, cudzysłów lub podział linii jest otaczane podwójnymi cudzysłowami, a cudzysłów wewnątrz takiego pola zapisuje się dwukrotnie. Ta zasada decyduje o tym, czy „Widżet, duży” jest jedną komórką, czy dwiema, i to właśnie ją pomijają naiwne parsery.

Separator nie zawsze jest przecinkiem. Arkusz działający w ustawieniach regionalnych, w których ułamki zapisuje się jako 1,5, nie może jednocześnie używać przecinka do oddzielania pól, więc Excel eksportuje tam średniki — na tym samym komputerze, z tego samego menu, tworząc plik, którego sąsiedni kraj nie otworzy. Eksporty z baz danych często używają tabulatorów. Każde narzędzie, które dobrze czyta CSV, zgaduje separator z kilku pierwszych linii, i tak robi też ta strona.

Nie ma też deklaracji kodowania, i to tu dane naprawdę giną. CSV z chińskimi nazwiskami zapisany przez jeden program i otwarty przez inny wraca jako krzaki, bo jeden założył UTF-8, a drugi systemową stronę kodową. A ponieważ każde pole jest tekstem bez typu, arkusz przy imporcie zgaduje na nowo: zera na początku znikają z numerów części, długie identyfikatory zamieniają się w notację naukową, a wszystko, co wygląda jak data, staje się datą. Plik był w porządku; to jego odczyt nie był.

Konwertuj CSV na inne formaty

CSV — FAQ

Czy CSV to po prostu plik tekstowy?

Tak, całkowicie. Bez kontenera, kompresji i niczego binarnego. Otworzy go każdy edytor tekstu, a to, co widzisz, jest tym, co zawiera.

Dlaczego mój CSV używa średników?

Bo został wyeksportowany w ustawieniach regionalnych, w których przecinek jest separatorem dziesiętnym, więc nie mógł też oddzielać pól. To nadal CSV, a każdy czytnik wart użycia wykrywa separator, zamiast go zakładać.

Dlaczego zniknęły moje zera na początku?

Bo CSV nie przechowuje typów, a arkusz zgadł. „007” wygląda jak liczba, więc stało się 7. Z plikiem nie było nic nie tak — zdecydował import. Większość arkuszy pozwala przy imporcie ustawić kolumnę jako tekst, i to jedyne niezawodne rozwiązanie.

Dlaczego mój chiński tekst jest zniekształcony?

Bo plik nie zawiera informacji o kodowaniu, a program, który go otwiera, zgadł inaczej niż program, który go zapisał. Zapis jako UTF-8 ze znacznikiem kolejności bajtów sprawia, że Excel czyta go poprawnie, kosztem znacznika, który niektóre inne narzędzia pokazują jako dziwne znaki.

Czy mogę tu przekonwertować CSV na PDF?

Tak. Plik jest parsowany jako CSV, a nie dzielony na przecinkach, więc pola w cudzysłowach przetrwają, a kolumny są dopasowane do zawartości, z pogrubionym wierszem nagłówka. Dostajesz coś do czytania i drukowania — niczego w PDF nie da się sortować ani sumować.

A konwersja na Excel?

Niepotrzebna: każdy arkusz kalkulacyjny otwiera CSV bezpośrednio, a wcześniejsza konwersja tylko dodaje krok, w którym typy są zgadywane. Konwersja, która tu istnieje, idzie w drugą stronę — PDF na Excel, który odbudowuje tabelę ze strony, która nigdy jej nie zapisała.