Strumenti per sviluppatori · Convertitori di sintassi
Standard mancante di CSV: cosa copre RFC 4180 e cosa lascia aperto
· Sfondo
csv json formati di dati
CSV è antecedente a qualsiasi specifica e quella RFC che la descrive è informativa e deliberatamente ristretta. Questo post spiega cosa definisce RFC 4180, di cosa non dice nulla e perché la conversione di CSV è quindi sempre una negoziazione.
Di chi è CSV corretto? — due esportazioni della stessa tabella, una con punto e virgola e una con virgole, entrambe denominate CSV
ToolAcre può emettere output delimitato da virgole, punti e virgola o tabulazioni da JSON. Non legge due esportazioni CSV concorrenti né ne dichiara corretta una. CSV qui è di sola scrittura, quindi la scelta del delimitatore è un'opzione di output esplicita anziché un algoritmo di rilevamento.
Questa distinzione impedisce un comune errore di fatto. Un'interfaccia in grado di scrivere punto e virgola non ha dimostrato di poter identificare il punto e virgola in un file sconosciuto, gestire i decimali locali o interpretare le intestazioni. Queste sono responsabilità di input separate deliberatamente escluse.
Due scelte di delimitatore sono opzioni di output, non prova che questo pannello legga uno dei due file
Il repository non contiene alcuna fonte per i primi fogli di calcolo o la cronologia del database, quindi l'articolo non inventa una cronologia. Si inizia con lo scrittore corrente e i suoi test: record, campi, delimitatori, terminazione CRLF e escape delle virgolette.
Il contesto storico può essere aggiunto in seguito con le fonti riviste. L'implementazione di un convertitore è la prova di ciò che il prodotto scrive oggi, non di quando è apparsa per la prima volta una convenzione o del motivo per cui i fornitori si sono divergenti.
La cronologia di CSV prima di RFC 4180 è esterna alle prove del repository
Un campo contenente delimitatore, virgolette doppie, ritorno a capo o avanzamento riga è racchiuso tra virgolette doppie e ciascuna virgoletta incorporata viene raddoppiata. Anche gli spazi bianchi iniziali o finali vengono citati per impedire il taglio comune dei fogli di calcolo. I record terminano con CRLF e il file viene terminato.
Questi comportamenti seguono le regole in stile RFC 4180 testate nel repository. L'articolo evita di rivendicare la conformità universale perché l'autore supporta anche delimitatori alternativi e aggiunge la gestione della sicurezza al di fuori della grammatica ristretta.
L'autore utilizza virgolette in stile RFC 4180 e CRLF senza dichiarare la piena conformità agli standard
Le celle CSV non conservano i tipi JSON. Le stringhe null e vuote diventano entrambe celle vuote, mentre i valori booleani e i numeri diventano rappresentazioni di testo. Il contenuto UTF-8 viene trasmesso ed è possibile aggiungere un prefisso BOM facoltativo per i consumatori che ne hanno bisogno.
L'interpretazione locale non è incorporata. Un delimitatore punto e virgola può coesistere con virgole decimali, ma lo scrittore non riformatta i numeri in base alle impostazioni internazionali né codifica un tipo di data. L'applicazione ricevente decide comunque come interpretare ciascun campo.
La codifica, il tipo e i confini locali rimangono espliciti in questo scrittore
Le variazioni implementate sono virgola, punto e virgola e tabulazione, più un BOM facoltativo. Il testo simile a una formula che inizia con `=`, `+`, `-`, `@`, tabulazione o ritorno a capo è preceduto da un apostrofo per impostazione predefinita, quindi i fogli di calcolo lo trattano come testo. Gli utenti possono disabilitare tale protezione e ricevere un avviso.
In questo scrittore non sono presenti suggerimenti `sep=` o modalità di escape con barra rovesciata. Menzionarli come opzioni spedite sarebbe falso. Le virgolette incorporate utilizzano il raddoppio, esattamente come affermano i test.
Le variazioni osservate nel foglio di calcolo sono limitate alle opzioni e alle protezioni implementate qui
Ogni presupposto in questo percorso inizia dall'analisi JSON: quale valore fornisce le righe, come la nidificazione si appiattisce in colonne tratteggiate e quali chiavi diventano intestazioni. Non viene fatta alcuna ipotesi su un dialetto CSV in entrata perché CSV in entrata viene rifiutato.
Questa correzione inverte la direzione richiesta della cartella di lavoro. Un flusso di lavoro CSV-to-JSON deve scegliere delimitatore, virgolette, intestazione e tipi di cella in un altro strumento. L'errore di ToolAcre spiega quel rifiuto piuttosto che indovinare tranquillamente.
I presupposti di conversione si applicano a JSON-a-CSV solo perché l'input CSV viene rifiutato
La riparazione di CSV non valido non rientra nell'ambito. Le virgolette interrotte, le codifiche miste e i delimitatori accidentali necessitano del CSV Cleaner o di un altro parser con diagnostica esplicita. Il convertitore di sintassi riceve testo JSON rigoroso, non danneggiato CSV.
L'output può comunque non essere adatto a una destinazione quando un albero nidificato crea colonne punteggiate ambigue o supera le colonne 2,000. Avvisi e limiti espongono gli errori a forma di tabella prima del download.
Conclusione: CSV è una convenzione, non un formato e puoi controllare come il pannello dei convertitori di sintassi trasforma un file ben formato in JSON
Tratta CSV come una convenzione le cui scelte devono essere visibili. ToolAcre documenta le sue scelte di output e rifiuta il contrario sottospecificato. Questo è più affidabile che utilizzare un pulsante per due lavori fondamentalmente diversi.
Esamina delimitatore, virgolette, CRLF, BOM e formula in escape rispetto al sistema ricevente. Se è necessaria l'analisi dell'input, utilizzare uno strumento che lo chieda invece di trasferire le convenzioni dello scrittore su un file sconosciuto.
Un pratico controllo di accettazione apre il file generato nel consumatore previsto ed esamina anche i byte o il testo non elaborati. Il punto di vista del consumatore coglie i problemi di visualizzazione e importazione; la vista grezza conferma il delimitatore, le virgolette doppie, CRLF e un BOM facoltativo senza reinterpretazione del foglio di calcolo. Testare stringhe simili a formule come testo inerte e un numero negativo come numero. Questi controlli accoppiati verificano il contratto effettivo dello scrittore senza affermare che ogni programma implementa le convenzioni CSV in modo identico.