Dai sottotitoli al foglio di calcolo, e ritorno: che cosa sopravvive al viaggio
Pubblicato il 05/08/2026 · 12 min di lettura · Strumenti per sviluppatori
Daniel Okonkwo — Sviluppatore front-end e redattore Tech presso Allin
Performance web · Formati di file
Verificato su 3 fonti
Entrambe le metà del viaggio sono conformi e un sottotitolo torna esattamente come è partito. All'andata ogni sottotitolo diventa una riga di indice, inizio, fine e testo; ogni campo che contenga una virgola, una virgoletta dritta o un a capo viene racchiuso tra virgolette doppie e le virgolette interne vengono raddoppiate, che è quanto descrive la RFC 4180. Anche le marche temporali sono protette in automatico, perché SubRip scrive i millesimi dopo una virgola: 00:00:01,000 contiene un separatore. Al ritorno il convertitore da CSV a SRT legge il file come record CSV e non come righe di testo, quindi un a capo chiude un record solo quando cade fuori dalle virgolette: un sottotitolo su due righe e uno su tre tornano interi. Provato sull'output dello stesso esportatore, un file che mescola sottotitoli di una, due e tre righe, con virgole e virgolette, si ricostruisce identico byte per byte e lo resta dopo tre viaggi consecutivi. L'importazione accetta inoltre i file separati da punto e virgola, ricostruisce nell'ordine della colonna indice quando ogni riga porta un numero distinto, e segnala un sottotitolo che finisce prima di iniziare o una riga illeggibile. Ciò che richiede ancora attenzione non sono i due convertitori ma il foglio di calcolo in mezzo, che può ritipizzare una colonna di tempi appena apri il file.
Una virgola viene protetta, una virgoletta raddoppiata e un sottotitolo su due righe conserva entrambe — verificato byte per byte su tre viaggi consecutivi. Ciò che può ancora alterare il file è il foglio di calcolo in mezzo.
Perché un foglio di calcolo è la forma giusta per la revisione
Un file di sottotitoli è un cattivo oggetto da consegnare a chi non fa il sottotitolatore. Intreccia contenuto e meccanica, così un revisore deve scavalcare numeri e marche temporali per leggere una frase, e qualunque modifica accidentale a una marca resta invisibile fino alla riproduzione. Una riga per sottotitolo risolve entrambi i problemi in una volta. Il testo sta in una sola colonna, leggibile dall'alto in basso; i tempi stanno nelle loro colonne, visibili ma difficili da toccare; e si può aggiungere una seconda colonna per una traduzione, un commento o un segno di approvazione senza disturbare nulla.
Le colonne che questo convertitore scrive sono indice, inizio, fine e testo, in quest'ordine, con una riga di intestazione con esattamente quei quattro nomi. L'indice è rigenerato dalla posizione di ogni sottotitolo nel file invece che copiato dalla numerazione di origine, quindi un file con contatori duplicati o fuori sequenza esce numerato pulitamente da uno. Conserva quella colonna. Al ritorno viene letta e non ignorata: quando ogni riga porta un numero distinto, l'importazione ricostruisce nell'ordine dell'indice, così un foglio che hai ordinato per testo mentre lavoravi produce comunque un file di sottotitoli nell'ordine giusto.
Virgole, virgolette e l'RFC che le copre
Il dialogo è pieno di virgole, e la virgola è il separatore di campo: è la prima cosa da controllare in qualunque strumento da sottotitoli a CSV. L'RFC 4180, il memo del 2005 che mise per iscritto l'aspetto abituale dei file CSV, dà la regola: i campi che contengono a capo, virgolette dritte o virgole vanno racchiusi fra virgolette, e una virgoletta dentro un campo simile si protegge facendola precedere da un'altra virgoletta. Questo convertitore rispetta entrambe le metà. «Beh, no, non esattamente.» si scrive come un solo campo fra virgolette, e Ha detto "il porto", non i moli. si scrive "Ha detto ""il porto"", non i moli." — protetto perché contiene sia una virgoletta sia una virgola, con ogni virgoletta interna raddoppiata.
Le marche temporali ricevono lo stesso trattamento senza che nessuno lo decida, e la ragione è un felice incidente del formato. SubRip scrive i millisecondi dopo una virgola, quindi 00:00:01,000 contiene un separatore di campo ed è protetta in ogni riga di ogni file che questo strumento produce. Vale la pena notarlo, perché è l'unico punto in cui la strana scelta di separatore di SubRip ti fa un favore: una marca WebVTT, che usa un punto, uscirebbe senza virgolette e sarebbe in balia di ciò che il programma lettore decide che sia un 00:00:01.000 non protetto.
Due deviazioni oneste, nessuna dannosa ma entrambe reali. L'RFC 4180 dice che i record sono delimitati da ritorno a capo e avanzamento di riga; questo convertitore scrive un solo avanzamento di riga, che ogni foglio di calcolo accetta e che conta solo se qualcosa a valle è molto letterale. E l'RFC ha stato Informational, non è uno standard: descrive che cosa fanno le implementazioni invece di imporlo, e la sua stessa formulazione dice «dovrebbero» e non «devono». Trattarlo come la definizione del CSV è una convenzione utile, non una garanzia sul prossimo programma che leggerà il tuo file.
Quattro cose da sapere sul foglio di calcolo in mezzo
Il delimitatore. I fogli di calcolo delle lingue che usano la virgola come separatore decimale — cioè francese, tedesco, spagnolo, italiano e portoghese — salvano spesso il file con punti e virgola tra i campi invece che con virgole, seguendo il separatore di elenco del sistema. L'importazione guarda il primo record e conta i separatori che cadono fuori dalle virgolette, quindi un file così viene letto e non rifiutato; un punto e virgola dentro un sottotitolo non viene contato, perché sta dentro un campo protetto. Scegliere esplicitamente la variante separata da virgole, quando il foglio la propone, dà ancora un file più pulito, ma un salvataggio normale in una di quelle cinque lingue non ti costa più l'importazione.
I tipi. Il CSV non porta alcuna informazione di tipo — l'RFC 4180 non dice nulla sui tipi di dato, perché non c'è nulla da dire: ogni campo è testo. Le virgolette proteggono l'analisi, non il significato. Un foglio di calcolo legge il campo protetto, lo scarta dalle virgolette e poi decide da sé che cosa contenga, ed è lì che la marca temporale rischia: 00:00:01,000 è una stringa che un programma ha diritto di leggere come ora, come numero con separatore delle migliaia o come testo, secondo la sua impostazione locale e le sue congetture. Nulla nel file glielo indica. L'abitudine affidabile è importare invece di aprire — usare il percorso di importazione testo del foglio e impostare le due colonne dei tempi su Testo prima che i dati arrivino — e controllare una marca prima di cominciare a modificare.
Le formule. Un sottotitolo il cui testo inizia con un segno di uguale, un più o una chiocciola — e con un meno seguito da una cifra o da un altro operatore, come -1-1 — viene scritto come campo protetto preceduto da un apostrofo, l'escape che il foglio di calcolo già capisce: la cella mostra il testo e non valuta nulla. L'importazione toglie di nuovo quell'apostrofo, così =SUM(A1:A9) fa il viaggio tale e quale. Il trattino di dialogo è lasciato in pace di proposito, perché una riga che inizia con «- Sì.» è una battuta in un file di sottotitoli su due e non è una formula in nessun foglio. Ciò da cui non ti protegge è una formula che digiti tu stesso mentre modifichi.
L'ordine. Ordinare è il gesto più naturale in un foglio di calcolo, perciò l'importazione legge la colonna indice invece di ignorarla: quando ogni riga porta il proprio numero distinto, l'uscita viene ricostruita nell'ordine dell'indice e un avviso ti dice che le righe sono state rimesse in sequenza. Ordina per testo per raggruppare battute simili durante una verifica terminologica e l'SRT ricostruito esce comunque in ordine cronologico. Se i numeri sono duplicati, o mancano su alcune righe, la colonna non è affidabile: allora si conserva l'ordine delle righe e lo strumento lo dice. I tempi invertiti sono segnalati allo stesso modo: una riga che va da 00:00:09,000 a 00:00:04,000 continua a essere scritta così com'è, ma ora viene contata e nominata invece di passare in silenzio.
| Che cosa contiene il sottotitolo | Come viene scritto il CSV | Che cosa torna | Verdetto |
|---|---|---|---|
| Una virgola | Campo fra virgolette doppie | Identico | Sopravvive |
| Una virgoletta dritta | Campo protetto, ogni virgoletta interna raddoppiata | Identico, anche dopo più viaggi | Sopravvive |
| Un a capo (sottotitolo su due righe) | Campo protetto, a capo reale dentro — corretto | Entrambe le righe, nello stesso sottotitolo | Sopravvive — identico byte per byte, tre viaggi |
| Una marca temporale, 00:00:01,000 | Sempre protetta — contiene una virgola | Identica, se il foglio non l'ha ritipizzata | Sopravvive al file; il rischio è il foglio |
| Un testo che inizia con = + - o @ | Protetto, con un apostrofo davanti — l'escape del foglio | La cella mostra il testo; l'importazione toglie l'apostrofo | Sopravvive — il trattino di dialogo resta intatto |
| Righe riordinate nel foglio | Nulla segna l'ordine originale tranne la colonna di indice | La colonna di indice viene letta; l'uscita segue il suo ordine | Sopravvive — conserva la colonna indice e leggi l'avviso |
Domande frequenti
- Una virgola dentro un sottotitolo rompe il CSV?
- No. Ogni campo che contenga una virgola, una virgoletta dritta o un a capo viene racchiuso fra virgolette, e una virgoletta dentro un campo simile si protegge raddoppiandola, che è ciò che descrive l'RFC 4180. Provato su casi reali: «Beh, no, non esattamente.» diventa un solo campo protetto, e Ha detto "il porto", non i moli. diventa "Ha detto ""il porto"", non i moli." — protetto perché contiene sia virgola sia virgoletta, con ogni virgoletta interna raddoppiata. Entrambi tornano identici byte per byte attraverso il convertitore da CSV a SRT, e sopravvivono a tre viaggi consecutivi senza accumulare virgolette, che è il tipico fallimento di una protezione ingenua. Le marche temporali sono protette dalla stessa regola senza che nessuno l'abbia scelto, perché SubRip scrive i millisecondi dopo una virgola e 00:00:01,000 contiene quindi un separatore.
- I sottotitoli su due o tre righe sopravvivono al viaggio?
- Sì, e il motivo vale la pena di conoscerlo, perché è lì che questo tipo di strumento di solito fallisce. Un sottotitolo con un a capo viene scritto come campo protetto con un a capo reale dentro, a cavallo di due righe fisiche del file CSV: la forma corretta secondo la RFC 4180 e quella che un foglio di calcolo apre come una cella sola. Il convertitore da CSV a SRT legge il file come record CSV e non come righe di testo, quindi un a capo chiude un record solo quando cade fuori dalle virgolette; un record steso su tre righe fisiche resta un record. Verificato sull'output dello stesso esportatore: un file che mescola sottotitoli di una, due e tre righe, uno con una virgola e uno con una virgoletta, si ricostruisce identico byte per byte e lo resta dopo tre viaggi consecutivi. Se modifichi il testo in un foglio di calcolo, usa il suo a capo dentro la cella — Alt+Invio in Excel su Windows — invece di digitare una barra rovesciata e una n, che sono solo due caratteri di testo.
- Il mio foglio di calcolo salva il file con punti e virgola. Verrà importato?
- Sì. I fogli di calcolo seguono il separatore di elenco del sistema e, nelle lingue che usano la virgola come segno decimale — francese, tedesco, spagnolo, italiano, portoghese —, quel separatore è il punto e virgola, quindi un salvataggio normale produce un file delimitato da punti e virgola. L'importazione guarda il primo record di ciò che incolli, conta le virgole e i punti e virgola che cadono fuori dai campi protetti e sceglie il più frequente; un punto e virgola dentro una battuta non viene contato, perché sta tra virgolette. Vale a dire che un file salvato da un foglio francese, tedesco, spagnolo, italiano o portoghese si importa così com'è. Scegliere esplicitamente la variante separata da virgole — di solito offerta con un nome come CSV UTF-8 o «delimitato da virgole» — resta l'abitudine più pulita se devi passare il file ad altro, ma non è più una condizione perché funzioni qui.
- Excel distruggerà le mie marche temporali leggendo 00:00:01,000 come ora o come numero?
- Può, e le virgolette non lo impediscono, perché proteggere e tipizzare sono due problemi diversi. L'RFC 4180 non dice assolutamente nulla sui tipi di dato: un campo CSV è testo, e il formato non ha modo di dire altrimenti. Le virgolette dicono al lettore dove il campo comincia e finisce; una volta scartato, che cosa il lettore decida che il contenuto significhi dipende solo da lui, e la congettura di un foglio dipende dalla sua impostazione locale quanto dalla stringa. Non contare sulla fortuna: usa il percorso di importazione testo del foglio invece di fare doppio clic sul file, e imposta le colonne di inizio e fine su Testo prima che i dati arrivino. Controlla poi una marca nel foglio, prima di modificare qualsiasi cosa, e verifica che dica ancora 00:00:01,000 e non un valore allineato a destra di altra forma. Se è stata convertita, chiudi senza salvare e importa di nuovo: riparare una colonna di tempi rovinati costa molto più che importarla bene la prima volta.
- Posso aggiungere, cancellare o riordinare righe nel foglio di calcolo?
- Aggiungi ed elimina liberamente; riordina pure liberamente, purché conservi la colonna indice. L'importazione legge quella colonna: quando ogni riga porta il proprio intero distinto, l'uscita viene ricostruita nell'ordine dell'indice e un avviso segnala che le righe sono state rimesse in sequenza, così un foglio ordinato alfabeticamente per testo per raggruppare battute simili produce comunque un file di sottotitoli in ordine cronologico. Se alcune righe hanno perso il numero, o due righe condividono lo stesso, la colonna non è affidabile: lo strumento conserva allora l'ordine in cui le righe compaiono e lo dice invece di indovinare. Eliminare una riga è sicuro: l'uscita viene rinumerata da uno, qualunque siano gli indici rimasti. L'importazione segnala ora anche un sottotitolo la cui fine precede l'inizio: una riga che va da 00:00:09,000 a 00:00:04,000 continua a essere scritta così com'è, ma viene contata e nominata invece di passare in silenzio. I tempi possono essere inseriti anche in secondi anziché in timecode, comodo quando aggiungi un sottotitolo a mano: 5.5 e 8.2 sono letti come 00:00:05,500 e 00:00:08,200.
Articoli che potrebbero interessarti
Tutte le guide →Strumenti correlati
SubRip non ha una specifica. La Library of Congress lo registra come solo in parte documentato e mal normalizzato, quindi che cosa sia un file .srt valido lo decide il lettore, il codificatore o la piattaforma che lo legge, e prima o poi due di essi non saranno d'accordo. Tutto ciò che è descritto qui è stato verificato sull'output reale dello strumento e non su una norma, perché per questo formato non ne esiste alcuna. WebVTT è diverso — ha una specifica pubblicata dal W3C — ma resta un Candidate Recommendation Draft e non una raccomandazione conclusa. Conserva il file originale, prova quello convertito nel lettore o nel servizio di caricamento che intendi davvero usare prima di buttare qualcosa, e considera ogni affermazione su ciò che fanno «tutti i lettori», comprese quelle di questa pagina, come qualcosa da verificare sul tuo.
Fonti
- IETF — RFC 4180, Common Format and MIME Type for Comma-Separated Values (CSV) Files, October 2005, status Informational: each record is on a separate line delimited by CRLF, an optional header line may appear first, fields containing line breaks, double quotes or commas should be enclosed in double quotes, and a double quote inside such a field is escaped by preceding it with another double quote — and the memo says nothing at all about data types
- IANA — Media type registration for text/csv, whose reference is RFC 4180 — the registration that gives a CSV file its identity, and the counterpart to SubRip, which has no registered media type at all
- Library of Congress — Sustainability of Digital Formats, FDD000569, SubRip Subtitle format (SRT): gives the timecode as hours:minutes:seconds,milliseconds (00:00:00,000) — the comma before the milliseconds is why every timestamp exported to CSV is quoted — and records that the format has no character-encoding standard, so a parser must attempt charset detection
Hai notato un errore in questo articolo?