I file CSV spiegati: separatori, virgolette, codifica ed Excel

Aggiornato:

Un file CSV è testo semplice: un record per riga, con i valori separati da virgole. Quasi ogni database, foglio di calcolo e servizio online può esportarlo, ed è per questo il modo abituale di portare una tabella da un programma a un altro. È anche facile sbagliare, perché il CSV si usava molto prima che qualcuno lo mettesse per iscritto, e i programmi non sono ancora d’accordo sui dettagli.

Questa parte della serie tratta le regole del CSV, i problemi di separatore e di virgolette che dividono i valori nel punto sbagliato, la codifica dei caratteri, cosa cambiano i fogli di calcolo quando aprono un file e un rischio da tenere a mente quando esporti dati che apriranno altre persone.

Le regole che il CSV ha davvero

Non esiste un unico standard ufficiale. Il riferimento più vicino è la RFC 4180, pubblicata nell’ottobre 2005, che descrive il formato usato dalla maggior parte dei programmi e registra il tipo di media text/csv. È un documento informativo, non uno standard di Internet, e fissa queste regole:

Tutto il resto varia. La Library of Congress degli Stati Uniti, che cataloga i formati di file per la conservazione a lungo termine, elenca varianti comuni: punto e virgola al posto delle virgole, a capo con solo LF o solo CR, barre rovesciate o virgolette singole al posto di quelle doppie e modi diversi di trattare gli spazi. Un file può quindi essere un CSV valido per il programma che l’ha scritto ed essere letto male da un altro.

Virgole, punto e virgola e tabulazioni

Dove la virgola è il separatore decimale, come in gran parte dell’Europa e del Sud America, una virgola tra i valori si scontrerebbe con numeri come 1,20. I file creati lì usano spesso il punto e virgola. Excel segue le impostazioni internazionali del computer: Microsoft spiega che, se il separatore decimale è la virgola, Excel usa il punto e virgola come separatore di elenco.

È il motivo più comune per cui un file si apre con tutto nella prima colonna: è stato scritto con un separatore e letto con un altro. La stessa tabella, con la virgola decimale nel prezzo (la barra indica un a capo):

I file separati da tabulazioni evitano quasi tutto questo, perché le tabulazioni compaiono di rado dentro i valori. Spesso hanno l’estensione .tsv o .txt invece di .csv.

Le virgolette: la regola che conta di più

Molti CSV rotti dipendono da un valore che aveva bisogno delle virgolette e non le ha avute, o da virgolette mai chiuse. Questi esempi seguono la RFC 4180:

Se scrivi un CSV da te, metti tra virgolette ogni valore che contiene il separatore, delle virgolette doppie o un a capo, e raddoppia le virgolette al suo interno. Mettere tutti i valori tra virgolette è consentito ed evita sorprese.

La codifica: perché gli accenti diventano ã

Un file CSV non dice nulla sulla propria codifica dei caratteri. La RFC 4180 osserva che l’uso comune è l’US-ASCII, che non ha lettere accentate, e oggi la maggior parte dei file è in UTF-8. L’UTF-8 memorizza lettere come ã, é o € in due o tre byte. Un programma che legge quei byte con un’altra codifica, come Windows-1252, mostra ogni byte come un carattere separato:

Microsoft spiega che Excel apre correttamente un CSV in UTF-8 con un doppio clic solo se il file inizia con un indicatore dell’ordine dei byte (BOM), tre byte invisibili che annunciano l’UTF-8. Se manca, Microsoft consiglia di importare il file, con Dati > Da testo/CSV. Se vedi questo stesso disordine in un file creato da te, è stato salvato con una codifica e aperto con un’altra.

Cosa cambiano i fogli di calcolo all’apertura di un CSV

Quando Excel apre direttamente un file .csv, indovina il tipo di ogni valore con le impostazioni predefinite. Microsoft documenta cosa succede ai dati che sembrano soltanto un numero o una data:

Valore nel CSVDopo l’apertura in ExcelPerché
0077Gli zeri iniziali vengono tolti dai numeri.
12345678901234561234567890123450, in notazione scientificaExcel conserva 15 cifre significative; le altre diventano zeri.
SEPT22-SepLetto come data (2 settembre).
MARCH11-MarLetto come data (1° marzo).

Le modifiche restano se il file viene salvato di nuovo. I nomi di geni nella tabella sono esempi reali: uno studio del 2016 su Genome Biology ha trovato queste conversioni in circa un quinto degli articoli che pubblicavano elenchi di geni in file Excel, e nel 2019 il comitato HUGO per la nomenclatura dei geni ha rinominato i geni SEPT e MARCH in SEPTIN e MARCHF proprio per questo. CAP, numeri di telefono, codici prodotto e identificativi lunghi subiscono la stessa sorte.

Per conservare i valori così come sono, importa il file invece di aprirlo: Dati > Da testo/CSV, poi Modifica per aprire Power Query, seleziona le colonne e imposta il tipo di dati su Testo. Microsoft suggerisce anche di rinominare il file da .csv a .txt prima di aprirlo, così compare la procedura guidata di importazione del testo, dove scegli come leggere ogni colonna. Le versioni recenti di Excel per Microsoft 365 ed Excel 2024 hanno anche impostazioni di conversione automatica dei dati che permettono di disattivare alcune di queste modifiche.

Un rischio in esportazione: l’iniezione di formule

I fogli di calcolo possono leggere come formula un valore che inizia con =, +, - o @. Se un sito esporta testo scritto dagli utenti, come nomi o commenti, un valore scritto come formula può essere eseguito come tale quando qualcuno apre il file, invece di essere mostrato come testo. Il catalogo delle debolezze del software di MITRE lo elenca come CWE-1236, più noto come CSV injection o iniezione di formule.

Riguarda i software che scrivono file CSV a partire da dati non affidabili. La difesa abituale è mettere un apostrofo (') davanti a ogni valore che inizia con uno di quei caratteri, anche se MITRE osserva che nessuna soluzione funziona in tutti i fogli di calcolo. Se ricevi un CSV da una fonte sconosciuta, guardalo in un editor di testo o importalo come testo prima di fidarti di ciò che mostra il foglio di calcolo.

CSV o JSON?

Il CSV è una tabella piatta senza tipi: ogni valore è testo finché un programma non decide altrimenti. Il JSON, tema della prima parte di questa serie, ha numeri, true, false, null, elenchi e oggetti annidati. Il CSV è più compatto e si apre in qualsiasi foglio di calcolo; il JSON è quello che usa la maggior parte delle API web. Convertire dall’uno all’altro significa decidere cosa fare di queste differenze.

Il convertitore di nTools mantiene ogni valore del CSV come testo, così 007 e gli identificativi lunghi arrivano intatti, e trasforma i valori JSON annidati in testo JSON dentro un’unica cella. Legge dati separati da virgole, punto e virgola o tabulazioni, segue le regole sulle virgolette viste sopra, segnala virgolette mai chiuse e funziona interamente nel tuo browser.

Convertitore CSV ↔ JSON

Domande frequenti

Perché il mio CSV si apre con tutto in una sola colonna?

Il file usa un separatore diverso da quello che il programma si aspetta, di solito punto e virgola letto come se fossero virgole, o il contrario. Importalo e scegli il separatore invece di aprirlo con un doppio clic.

Perché gli accenti sono sbagliati dopo aver aperto un CSV?

Il file è in UTF-8 ed è stato letto con un’altra codifica. In Excel importalo con Dati > Da testo/CSV invece di aprirlo con un doppio clic, oppure salva il file in UTF-8 con l’indicatore dell’ordine dei byte.

Come conservo gli zeri iniziali aprendo un CSV in Excel?

Importa il file invece di aprirlo con un doppio clic e imposta su Testo le colonne con codici, CAP o numeri di telefono prima di caricarlo.

Un file CSV può avere più fogli o una formattazione?

No. Contiene una sola tabella di testo semplice. Quando salvi una cartella di lavoro come CSV, Excel salva solo il foglio corrente, e ciò che il testo semplice non può contenere, come formattazione e grafici, va perso.

Un file separato da punto e virgola è ancora un CSV?

A rigore la RFC 4180 descrive solo le virgole, ma i file con punto e virgola sono comuni e la maggior parte dei programmi li accetta se scegli il separatore.

Il convertitore di nTools carica i miei dati?

No. La conversione avviene nel tuo browser e i dati non vengono inviati da nessuna parte.

Prossima della serie Le codifiche del testo spiegate: UTF-8, Base64 e codifica URL →

Riferimenti

  1. RFC 4180 — Common Format and MIME Type for Comma-Separated Values (CSV) Files
  2. Library of Congress — CSV, Comma Separated Values (RFC 4180)
  3. Microsoft Support — Import or export text (.txt or .csv) files
  4. Microsoft Support — Keeping leading zeros and large numbers
  5. Microsoft Support — Opening CSV UTF-8 files correctly in Excel
  6. Ziemann, Eren and El-Osta — Gene name errors are widespread in the scientific literature (Genome Biology, 2016)
  7. HUGO Gene Nomenclature Committee — Summer newsletter 2020
  8. MITRE — CWE-1236: Improper Neutralization of Formula Elements in a CSV File

Guide correlate