Data & spreadsheet · CSV Lebih bersih
RFC 4180 Dijelaskan: Hal Yang Paling Dekat CSV Harus Sesuai dengan Standar Resmi
· Latar belakang
csv rfc-4180 format data
CSV sudah ada selama beberapa dekade sebelum ada yang menuliskannya. Posting ini membahas RFC 4180, apa yang sebenarnya dikatakan tentang pembatas, kutipan, akhir baris dan header, dan mengapa file dunia nyata masih mengabaikannya.
Dua file CSV 'valid' yang tidak dapat dibaca dengan benar oleh parser mana pun — mengapa format ini berkembang selama beberapa dekade tanpa standar
Dua file dapat memiliki ekstensi .csv sementara yang satu menggunakan titik koma, tab lain, dan masing-masing menerapkan tanda kutip secara berbeda. Seorang parser harus mengetahui dialek sebelum tanda baca menjadi struktur. ToolAcre dimulai dengan empat kandidat dan skor menguraikan bentuk sampel daripada mempercayai ekstensi.
Fleksibilitas tersebut menjelaskan mengapa “CSV” sering kali merupakan deskripsi yang tidak lengkap. Pembersih dapat menerima penyimpangan umum dan kemudian membuat serial hasil yang konsisten. Perilakunya ditentukan oleh konfigurasi dan pengujian, sehingga memberikan kontrak yang lebih berguna daripada mengasumsikan setiap produser mengikuti satu memo dengan sempurna.
Apa itu RFC 4180 — sebuah memo informasi dari 2005 yang mendokumentasikan praktik umum, bukan standar yang mengikat
Repositori berulang kali menyebutkan RFC 4180 sebagai konvensi keluaran, namun ini bukan sumber klaim historis tentang tanggal atau status hukum memo tersebut. Oleh karena itu artikel ini berfokus pada aturan yang terkandung dalam implementasi: akhiran rekaman, kutipan, lebar header, dan penanganan pembatas.
Jika sejarah standar eksternal penting, kutip publikasi utama secara terpisah. Untuk menggunakan ToolAcre, bukti yang relevan bersifat lokal: kode defaultnya adalah CRLF, mengutip karakter struktural, menggandakan tanda kutip dalam, dan melaporkan baris yang lebarnya berbeda dari header.
Bukti penyimpanan menggunakan RFC 4180 sebagai konvensi target; riwayat publikasi berada di luar kumpulan sumber
Target yang dikonfigurasi menjelaskan keluaran yang dibatasi koma, akhiran baris CRLF, konsep header opsional, dan baris persegi panjang. Pada rute pengiriman, baris pertama dalam praktiknya tidak opsional: selalu digunakan sebagai header. File tanpa header kehilangan rekaman pertamanya karena peran tersebut.
Masukan yang acak-acakan tidak menyebabkan penolakan. Baris pendek diisi dengan sel kosong; baris panjang menyimpan tambahan, dan keduanya menerima peringatan bernomor baris. Serializer menulis setiap baris yang dipertahankan, jadi “output bersih” tidak berarti program menebak cara memperbaiki ketidaksepakatan struktural.
Mengutip sesuai memo — kapan kolom harus dikutip dan bagaimana kutipan ganda literal digandakan
Bidang harus diberi tanda kutip jika berisi pembatas, tanda kutip, atau karakter akhir rekaman yang dipilih. ToolAcre juga mengutip spasi di depan atau di belakang sehingga parser lain tidak memangkasnya secara diam-diam. Di dalam kolom tanda kutip, setiap tanda kutip ganda literal menjadi dua tanda kutip ganda.
Pengalih Quote every field meminta gaya yang seragam; jika tidak, output akan dikutip secara minimal. Kutipan sumber yang berlebihan mungkin hilang sementara nilai yang diurai tetap sama. Normalisasi ini diharapkan dan itulah sebabnya pengujian membandingkan tabel yang dipulihkan serta keluaran yang tepat untuk contoh yang dipilih.
Jenis media text/csv — header opsional dan parameter jaringan karakter, dan mengapa media tersebut jarang dibawa bersama file di disk
File pada disk jarang datang dengan parameter tipe media terpasang. ToolAcre tidak membaca parameter `header` atau `charset` dari file yang dipilih. Itu bergantung pada kontrak rutenya: teks UTF-8, header baris pertama dan deteksi pembatas yang didukung atau pemilihan manual.
Sakelar ekspor BOM opsional menulis U+FEFF sebelum header pertama. Hal ini mungkin membantu spreadsheet mengenali UTF-8, namun konfigurasinya memperingatkan bahwa hal ini dapat merusak skrip ketat atau impor basis data karena penanda bergabung dengan nama depan jika tidak dihapus. Biarkan saja kecuali konsumen memerlukannya.
Di mana dunia berbeda - titik koma, akhiran baris LF, baris acak-acakan, dan pengkodean tanpa label, dan mengapa memo tidak menoleransi semua itu
Masukan sebenarnya dapat menggunakan titik koma, tab atau pipa, LF atau CR tunggal, baris tidak rata dan UTF-8 BOM di depannya. Parser dengan sengaja menerima semua akhiran baris dan kandidat pembatas tersebut. Ia tidak “menoleransi” baris-baris yang tidak rata secara diam-diam; itu menyimpan data dan melampirkan peringatan.
Kutipan yang tidak ditutup adalah kondisi lain yang diterima namun dilaporkan. Segala sesuatu setelah kutipan pembuka menjadi satu bidang, karena tidak ada batas penutup yang jelas. Perbaiki sumber itu sebelum mempercayai ekspor. Penguraian permisif adalah strategi pelestarian, bukan sertifikasi bahwa masukan telah sesuai.
ToolAcre menerima beberapa penyimpangan dunia nyata sambil melaporkan baris yang tidak rata alih-alih menolaknya
Tidak ada aturan di sini yang memberikan tipe sel numerik, boolean, atau null. Parser mengembalikan string dan konverter JSON mempertahankannya sebagai string. Konvensi semantik harus disepakati oleh pengirim dan penerima, termasuk apakah teks kosong hilang dan apakah urutan digit merupakan pengidentifikasi.
Keamanan injeksi formula adalah kebijakan ekspor yang berlapis di atas sintaksis CSV. Saat diaktifkan, karakter utama yang berisiko menerima apostrof kecuali bentuk numerik biasa. Hal ini dengan sengaja mengubah nilai keamanan spreadsheet; ini bukan bagian dari pelolosan kutipan atau sistem tipe umum.
Bertujuan untuk keluaran bergaya RFC bahkan ketika masukan mengabaikannya — bagaimana Pembersih ToolAcre CSV memperbaiki file menuju pembatasan dan kutipan yang konsisten
Bertujuan untuk menghasilkan keluaran yang dapat diprediksi meskipun dialek sumbernya bervariasi. Setelah menguraikan dan menyelesaikan peringatan, ToolAcre mengeluarkan CRLF catatan dan pelolosan kutipan ganda standar. Jika pembatas yang terdeteksi tetap berupa titik koma atau tab, pengunduhan akan mempertahankan pembatas tersebut dan tidak selalu memaksakan koma.
Pilih koma secara manual ketika kontrak penerima memerlukan keluaran yang dipisahkan koma, dan periksa kontrol karena ini menampilkan pembatas yang sebenarnya digunakan. Konsistensi berasal dari pilihan eksplisit ditambah bentuk baris yang ditinjau, bukan dari ekstensi CSV saja.