Data & hamparan · CSV Pembersih
RFC 4180 Dijelaskan: Perkara Paling Dekat CSV Perlu Piawaian Rasmi
· Latar belakang
csv rfc-4180 format data
CSV wujud selama beberapa dekad sebelum sesiapa pun menulisnya. Siaran ini membincangkan RFC 4180, perkara yang sebenarnya dikatakan tentang pembatas, petikan, pengakhiran baris dan pengepala serta sebab fail dunia sebenar masih mengabaikannya.
Dua fail CSV 'sah' yang tiada penghurai tunggal membaca dengan betul — sebab format itu berkembang selama beberapa dekad tanpa standard
Dua fail boleh membawa sambungan .csv manakala satu menggunakan koma bertitik, satu lagi tab dan setiap satu menggunakan petikan secara berbeza. Penghurai mesti mengetahui dialek sebelum tanda baca menjadi struktur. ToolAcre bermula dengan empat calon dan menilai bentuk sampel yang dihuraikan daripada mempercayai sambungan.
Fleksibiliti itu menerangkan sebab "CSV yang sah" selalunya merupakan perihalan yang tidak lengkap. Pembersih boleh menerima sisihan biasa dan kemudian menyusun hasil yang konsisten. Tingkah lakunya ditakrifkan oleh konfigurasi dan ujian, memberikan kontrak yang lebih berguna daripada mengandaikan setiap pengeluar mengikuti satu memo dengan sempurna.
Apa itu RFC 4180 — memo maklumat daripada 2005 yang mendokumenkan amalan biasa, bukan standard yang mengikat
Repositori berulang kali menamakan RFC 4180 sebagai konvensyen output, tetapi ia bukan sumber untuk tuntutan sejarah tentang tarikh memo atau status undang-undang. Oleh itu, artikel ini menumpukan pada peraturan yang terkandung dalam pelaksanaan: pengakhiran rekod, petikan, lebar pengepala dan pengendalian pembatas.
Apabila sejarah piawaian luar penting, sebutkan penerbitan utama secara berasingan. Untuk menggunakan ToolAcre, bukti yang berkaitan adalah setempat: kod lalai kepada CRLF, memetik aksara struktur, menggandakan petikan dalam dan melaporkan baris yang lebarnya berbeza daripada pengepala.
Bukti repositori menggunakan RFC 4180 sebagai konvensyen sasaran; sejarah penerbitan berada di luar set sumber
Sasaran yang dikonfigurasikan menerangkan output yang dipisahkan koma, CRLF penghujung baris, konsep pengepala pilihan dan baris segi empat tepat. Pada laluan yang dihantar, baris pertama tidak menjadi pilihan dalam amalan: ia sentiasa digunakan sebagai pengepala. Fail tanpa pengepala kehilangan rekod pertamanya kepada peranan itu.
Input lusuh tidak menyebabkan penolakan. Baris pendek dilapisi dengan sel kosong; baris panjang menyimpan tambahan, dan kedua-duanya menerima amaran bernombor baris. Penyeri bersiri menulis setiap baris yang dikekalkan, jadi "output bersih" tidak bermakna program meneka cara membetulkan perselisihan struktur.
Petikan mengikut memo — bila medan mesti dipetik dan cara petikan berganda literal digandakan
Medan mesti dipetik apabila ia mengandungi pembatas yang dipilih, petikan atau aksara penghujung rekod. ToolAcre juga memetik ruang hadapan atau belakang supaya penghurai lain tidak memotongnya secara senyap. Di dalam medan yang disebut, setiap petikan berganda literal menjadi dua petikan berganda.
Suis Petikan setiap medan meminta gaya seragam; jika tidak, keluaran dipetik minima. Petikan sumber yang berlebihan mungkin hilang manakala nilai yang dihuraikan kekal sama. Normalisasi ini dijangka dan itulah sebabnya ujian membandingkan jadual yang dipulihkan serta output tepat untuk contoh yang dipilih.
Jenis media text/csv — parameter pengepala dan set aksara pilihan, dan sebab mereka jarang mengembara dengan fail pada cakera
Fail pada cakera jarang tiba dengan parameter jenis media dilampirkan. ToolAcre tidak membaca parameter `header` atau `charset` daripada fail yang dipilih. Ia bergantung pada kontrak laluannya: teks UTF-8, pengepala baris pertama dan pengesanan pembatas yang disokong atau pemilihan manual.
Suis eksport BOM pilihan menulis U+FEFF sebelum pengepala pertama. Itu mungkin membantu hamparan mengenali UTF-8, tetapi konfigurasi memberi amaran ia boleh memecahkan skrip atau import pangkalan data yang ketat kerana penanda menyertai nama pertama apabila tidak dilucutkan. Biarkan ia dimatikan melainkan pengguna memerlukannya.
Di mana dunia menyimpang — koma bertitik, penghujung baris LF, baris compang-camping dan pengekodan tidak berlabel, dan sebab memo itu tidak membenarkannya
Input sebenar mungkin menggunakan koma bertitik, tab atau paip, LF atau CR tunggal, baris tidak sekata dan UTF-8 BOM terkemuka. Penghurai dengan sengaja menerima semua penghujung baris dan calon pembatas itu. Ia tidak "bertolak ansur" barisan compang-camping secara senyap; ia menyimpan data dan melampirkan amaran.
Sebut harga yang tidak ditutup ialah satu lagi syarat yang diterima tetapi dilaporkan. Segala-galanya selepas petikan pembukaan menjadi satu medan, kerana tiada sempadan penutup yang jelas wujud. Betulkan sumber itu sebelum mempercayai eksport. Penghuraian permisif ialah strategi pemeliharaan, bukan pensijilan bahawa input itu mematuhi.
ToolAcre menerima beberapa sisihan dunia sebenar sambil melaporkan baris yang compang-camping dan bukannya menolaknya
Tiada peraturan di sini memberikan sel jenis numerik, boolean atau null. Penghurai mengembalikan rentetan dan penukar JSON mengekalkannya sebagai rentetan. Konvensyen semantik mesti dipersetujui oleh pengirim dan penerima, termasuk sama ada teks kosong tiada dan sama ada urutan digit ialah pengecam.
Keselamatan suntikan formula ialah dasar eksport berlapis di atas sintaks CSV. Apabila didayakan, watak utama berisiko menerima apostrof kecuali bentuk angka biasa. Itu sengaja menukar nilai untuk keselamatan hamparan; ia bukan sebahagian daripada petikan pelepasan aksara atau sistem jenis umum.
Matlamat untuk output gaya RFC walaupun input mengabaikannya — cara ToolAcre CSV Cleaner membaiki fail ke arah persempadanan dan petikan yang konsisten
Matlamat untuk output yang boleh diramal walaupun dialek sumber berbeza-beza. Selepas menghuraikan dan menyelesaikan amaran, ToolAcre mengeluarkan CRLF rekod dan melarikan petikan berganda standard. Jika pembatas yang dikesan kekal dengan koma bertitik atau tab, muat turun mengekalkan pembatas itu daripada sentiasa memaksa koma.
Pilih koma secara manual apabila kontrak penerima memerlukan output dipisahkan koma dan periksa kawalan kerana ia memaparkan pembatas yang sebenarnya digunakan. Ketekalan datang daripada pemilihan eksplisit serta bentuk baris yang disemak, bukan daripada sambungan CSV sahaja.