I file CSV UTF-8 devono contenere una DBA (contrassegno dell'ordine dei byte)?


37

Il nostro software line-of-business consente all'utente di salvare determinati dati come CSV . Dato che ci sono molti formati diversi (tutti chiamati "CSV") in uso in natura, stiamo cercando di decidere quale dovrebbe essere il "formato predefinito".

  • Per quanto riguarda i separatori di linea / campo e la fuga, esiste uno standard che possiamo usare: RFC 4180 .

  • Per quanto riguarda la codifica del testo, UTF-8 sembra essere emerso nell'ultimo decennio come "formato di file di testo predefinito", quindi lo useremo.

L'unica domanda lasciata aperta è: dovremmo aggiungere una DBA all'inizio o no? Ho letto più opinioni e pro / contro sull'uso delle distinte base in generale, ma esiste una raccomandazione "ufficiale" o almeno un tipo di consenso della comunità sull'uso delle distinte materiali nei file CSV?


7
Se ha una DBA, allora non è UTF-8. Ma quale formato vogliono i programmi. Se hanno bisogno di una distinta base (principalmente micro-bradipo), è necessario aggiungerne una, ma UTF-8 + BOM ≠ UTF-8.
ctrl-alt-delor

3
Anche se CSV è apparentemente più facile da generare, ci sono così tanti problemi di compatibilità, specialmente se ti allontani da ASCII a 7 bit puro, che ti consiglio vivamente di generare XLSX reale se l'obiettivo è che gli utenti lo aprano in Excel (anziché reimportarlo in qualche altro software, nel qual caso dovrai fornire opzioni per separatori, codifica, ecc.). Esistono librerie per la maggior parte delle lingue e risparmierai molto tempo a te e ai tuoi utenti.
Jcaron,

2
Se segui il percorso CSV, controlla cosa succede quando apri il file su Mac e PC, idealmente con diverse versioni di Excel. Inoltre, tenere presente che alcune versioni di Excel non si comportano allo stesso modo quando si fa doppio clic sul file per aprirlo o aprirlo tramite il menu.
Jcaron,

2
Perché è importante se si apre correttamente in Excel? Nulla nella domanda afferma che Excel deve essere in grado di analizzare il file generato ...
rubenvb

Risposte:


55

Non per UTF-8 , ma vedi i vari avvertimenti nei commenti.

Non è necessario (UTF-8 non ha un ordine di byte) a differenza di UTF-16/32 e non è raccomandato nello standard Unicode . È anche abbastanza raro vedere UTF-8 con la distinta base "in the wild", quindi a meno che tu non abbia un motivo valido (ad esempio, come commentato, lavorerai con un software che prevede la distinta base) consiglierei l'approccio senza distinta materiali .

Wikipedia menziona principalmente software Microsoft che forza e si aspetta una DBA, ma a meno che tu non stia lavorando con loro, non utilizzarla.


28
Esiste anche un software diffuso che richiede una DBA: Excel ha bisogno di una DBA per identificare correttamente un file CSV come UTF-8 anziché "ANSI", ovvero le impostazioni locali di compatibilità locale. (Ma Excel fa anche cose strane quando salva un file del genere, quindi consigliamo agli utenti di utilizzare la nostra esportazione "reale" di Excel invece dell'esportazione CSV se vogliono aprire il file con Excel.)
Heinzi,

21
@Heinzi Ho imparato molto tempo fa che non puoi davvero vincere quando lavori con CSV ed Excel. È semplicemente un pessimo lettore CSV. Peccato che ciò che i normali utenti si aspettano.
pipe

9
@Voo: richiedere una DBA per UTF-8 viola sicuramente lo standard, considerando che non è " né richiesto né raccomandato ".
Deduplicatore,

12
@Deduplicator: i sistemi MS-DOS e Windows hanno una grande base di file di testo legacy in codifiche diverse da UTF-8. Le applicazioni di qualità consentono all'utente di specificare la modalità di codifica di un file di testo all'apertura, ma spesso includono un'opzione "auto". Se un utente seleziona "UTF-8", un file UTF-8 verrà aperto correttamente con o senza DBA. Se un utente seleziona "auto", alcuni file UTF-8 che non hanno una DBA potrebbero essere identificati erroneamente come se usassero altre codifiche. Non sono sicuro di cosa ci si aspetterebbe che un'applicazione faccia diversamente, dato che i file "erroneamente identificati" potrebbero essere identici bit per bit con ...
supercat

7
@Voo: questo è in conflitto con molti altri requisiti specifici del formato in cui una DBA è illegale. Ad esempio, uno script di shell con una DBA prima del #!non è valido. Nella migliore delle ipotesi una DBA in UTF-8 è "consentita, quando nessun requisito specifico per formato / applicazione lo preclude", non "consentita", e come tale non dovrebbe essere utilizzata. Gli standard sono in realtà chiari su NON DOVREBBE.
R ..

8

Non esiste ancora una convenzione diffusa AFAIK, sebbene certamente UTF-8 sia ora generalmente accettato.

La BOM è un terribile artefatto:

È invisibile (spazio di larghezza zero).

Alcuni software potrebbero rompersi sul nome della prima colonna non contenente solo lettere, ma quella strana DBA davanti.

È possibile che la riga di intestazione venga copiata per le righe di valore che danneggiano il primo valore.

È necessario solo per alcuni software Windows per distinguere tra una delle codifiche ANSI utilizzate da quella macchina Windows locale e UTF-8. Blocco note, Excel.

Quindi la cosa triste è che uno dovrebbe supportare la DBA. Forse facoltativo

Utilizzare uno schema di denominazione per i file (...- utf8.txt, ...- utf8bom.txt).


In molti casi potremmo usare HTML come alternativa all'esportazione. Ciò consente di impostare la codifica nel file. Un'ulteriore caratteristica è la colorazione di sfondo / primo piano di righe e celle. Ciò aumenta la qualità dell'esportazione.


15
Il fatto che la formattazione "accresca la qualità dell'esportazione" dipende fortemente dall'uso previsto del file. CSV è spesso usato come un semplice formato leggibile da una macchina e rendere il destinatario analizzare HTML invece sarebbe un grosso svantaggio in quel caso.
IMSoP,

5
Se scegli uno schema di denominazione, tieni a mente il pubblico. -utf8-windows.csvè meglio. Quasi tutti sanno cos'è Windows, nel contesto dei computer, ma molti meno utenti sanno cos'è un Byte Order Mark.
Salterio,

2
@Davislor sì, se si tratta di uno standard noto ampiamente comunicato. Altrimenti arriveranno segnalazioni di errori tschüßsull'essere spazzatura mentre tschüßavrebbe dovuto essere scritto. Su StackOverflow molti errori IT riguardano le codifiche. Anche gli utenti finali avranno problemi.
Joop Eggen,

3
@JoopEggen "Standard conosciuto ampiamente comunicato" in quale comunità esattamente? Sto sviluppando software da quasi 10 anni e non l'ho mai visto, nemmeno su Windows, e certamente non su Linux o OSX, dove hai quasi sempre a che fare con utf-8.
Cubico

1
@JustinTime sì da qualche anno, ma non prima. Gli sviluppatori MS non sono così male (conformità Posix, ora supporto UTF-8).
Joop Eggen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.