I file CSV spiegati: separatori, virgolette, codifica ed Excel
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:
- Ogni record sta su una riga propria, chiusa da un a capo (CR LF). L’ultima riga può terminare con un a capo oppure no.
- La prima riga può essere un’intestazione con i nomi delle colonne, nello stesso formato delle altre.
- I valori sono separati da virgole, ogni riga dovrebbe avere lo stesso numero di valori e dopo l’ultimo non c’è la virgola.
- Gli spazi fanno parte del valore: in Ana, Lisbona il secondo valore inizia con uno spazio.
- Un valore che contiene una virgola, delle virgolette doppie o un a capo dovrebbe essere racchiuso tra virgolette doppie.
- Dentro un valore tra virgolette, le virgolette doppie si scrivono due volte.
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):
nome;prezzo / Pão;1,20Separato da punto e virgola: due colonne, nome e prezzo, e 1,20 resta un solo valore.nome,prezzo / Pão,"1,20"Separato da virgole: il prezzo va tra virgolette, altrimenti 1 e 20 diventerebbero due valori.nome;prezzo / Pão;1,20 letto con le virgoleL’intestazione diventa un’unica colonna chiamata nome;prezzo, e la virgola di 1,20 divide la riga in Pão;1 e 20.
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:
"Lisbona, Portogallo"Un solo valore. Senza le virgolette verrebbe diviso in due colonne, Lisbona e Portogallo."Ha detto ""ciao"""Si legge Ha detto "ciao": tra virgolette, ogni "" vale come una virgoletta doppia."riga uno / riga due"Un solo valore con un a capo all’interno (qui, la barra). I programmi che leggono il file riga per riga, senza guardare le virgolette, lo dividono in due record."mai chiusaUna virgoletta senza la sua compagna può inghiottire il resto del file in un solo valore. Un parser accurato la segnala invece come errore.
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:
Pão → PãoI due byte di ã, letti come Windows-1252.café → caféLo stesso succede alla é.€ → €Il simbolo dell’euro occupa tre byte in UTF-8, quindi diventa tre caratteri.
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 CSV | Dopo l’apertura in Excel | Perché |
|---|---|---|
| 007 | 7 | Gli zeri iniziali vengono tolti dai numeri. |
| 1234567890123456 | 1234567890123450, in notazione scientifica | Excel conserva 15 cifre significative; le altre diventano zeri. |
| SEPT2 | 2-Sep | Letto come data (2 settembre). |
| MARCH1 | 1-Mar | Letto 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.
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
- RFC 4180 — Common Format and MIME Type for Comma-Separated Values (CSV) Files
- Library of Congress — CSV, Comma Separated Values (RFC 4180)
- Microsoft Support — Import or export text (.txt or .csv) files
- Microsoft Support — Keeping leading zeros and large numbers
- Microsoft Support — Opening CSV UTF-8 files correctly in Excel
- Ziemann, Eren and El-Osta — Gene name errors are widespread in the scientific literature (Genome Biology, 2016)
- HUGO Gene Nomenclature Committee — Summer newsletter 2020
- MITRE — CWE-1236: Improper Neutralization of Formula Elements in a CSV File
Guide correlate
- Indirizzi IP spiegati: IPv4, IPv6 e gli intervalli riservati
- Sottoreti e CIDR spiegati: prefissi, maschere e host utilizzabili
- Record DNS spiegati: A, AAAA, CNAME, MX, TXT e NS
- Un sito è down o il problema è solo tuo? Come verificarlo, passo per passo
- Codici di stato HTTP ed errori di Cloudflare: cosa significano 403, 404, 429, 500, 503 e 521
- Timestamp Unix e fusi orari spiegati
- Contare le date: giorni tra due date, anni bisestili e settimane ISO
- Formati immagine spiegati: JPEG, PNG, WebP, AVIF e HEIC
- Le dimensioni di un’immagine spiegate: pixel, DPI, peso e qualità
- Le foto del telefono spiegate: HEIC, metadati EXIF e la tua privacy
- Robustezza delle password spiegata: lunghezza, entropia e passphrase
- Funzioni di hash spiegate: SHA-256, checksum e hashing delle password
- JSON Web Token spiegati: claim, firme e validazione sicura
- Gli UUID spiegati: v4, v7 e come scegliere la versione giusta
- I codici QR spiegati: capacità, correzione degli errori e dimensioni di stampa
- Percentuali e IVA spiegate: aggiungere, scorporare e cumulare
- Errori comuni nel JSON e come correggerli
- Le codifiche del testo spiegate: UTF-8, Base64 e codifica URL
- Modificare i PDF nel browser: cosa conservano unione, divisione e conversione