Data & hamparan · CSV Pembersih
Bagaimana UTF-8 dan Windows-1252 Keliru: Membaiki Mojibake CSV Eksport
· Bagaimana ia berfungsi
csv pengekodan pembersihan data
Apabila 'José' menjadi 'José', baitnya baik dan tafsirannya salah. Siaran ini menerangkan cara dua pengekodan yang paling biasa bertembung, cara mengenali gejala dan cara penyahkodan semula membaikinya.
Nama beraksen dan petikan kerinting bertukar menjadi sup simbol — corak cerita bagi fail UTF-8 dibaca sebagai Windows-1252 dan sebaliknya
Nama pelanggan yang menjadi berlian gantian selepas dimuatkan bukanlah bukti bahawa CSV Cleaner mengesan halaman kod warisan yang salah. Konfigurasi menyatakan sebaliknya: sahaja UTF-8 yang difahami dan fail Windows-1252 atau Shift-JIS dibaca sebagai UTF-8. Oleh itu jujukan bait yang tidak sah sudah boleh digantikan sebelum penghurai CSV melihat aksara.
Garis besar memusatkan mojibake biasa seperti José, tetapi laluan baca pelayar menggunakan `File.text()` dan tidak menyediakan pemilih pengekodan. Artikel ini membetulkan janji itu. Gejala yang boleh diambil tindakan dalam alat ini ialah aksara gantian atau teks yang rosak, dengan bait fail asal disimpan untuk pemulihan di tempat lain.
Fail bukan UTF-8 mencapai alat ini sebagai aksara gantian, bukan corak mojibake yang disahkan
Fail yang dibataskan ialah bait pada cakera, manakala penghurai beroperasi pada rentetan JavaScript. Pengekodan mentakrifkan pemetaan antara lapisan tersebut. CSV menamakan sintaks koma, petikan dan sempadan rekod tetapi tidak membawa pengisytiharan pada cakera yang boleh dipercayai yang memberitahu `File.text()` pemetaan warisan yang dibuat setiap bait bukan ASCII.
Selepas penyahkodan telah menghasilkan aksara gantian U+FFFD, kemudian operasi CSV menerima ruang letak tersebut sebagai teks biasa. Pemangkasan atau pengeksportan tidak boleh menyimpulkan jujukan bait asal atau aksara yang dimiliki di sana. Itulah sebabnya sumber yang tidak disentuh lebih penting daripada senarai cari-dan-ganti yang dipasang daripada paparan yang rosak.
Dua suspek biasa — jujukan berbilang bait UTF-8 dan bait tunggal Windows-1252 dan sebab mereka menghasilkan sampah yang boleh diramal apabila ditukar
UTF-8 mewakili bukan-ASCII aksara dengan jujukan berbilangbait. Windows-1252 memperuntukkan banyak aksara Barat kepada nilai bait individu. Membaca satu konvensyen di bawah yang lain boleh gagal atau mencipta teks yang mengelirukan, tetapi laluan ini tidak menguji penyahkod alternatif, menjaringkan bahasa yang munasabah atau menawarkan pilihan Windows-1252.
Satu-satunya tingkah laku penghurai khusus pengekodan ialah mengalih keluar tanda pesanan bait U+FEFF UTF-8 yang terkemuka selepas penyahkodan teks. Itu menghalang penanda daripada menyertai pengepala pertama. Ia bukan pengesanan pengekodan umum dan tidak memberikan sokongan untuk Shift-JIS, UTF-16 atau halaman kod serantau yang tidak dinyatakan di mana-mana dalam pelaksanaan.
ToolAcre menerima UTF-8 teks dan tidak membandingkan Windows-1252 calon
Aksara penggantian menunjukkan bahawa penyahkod teks tidak dapat memetakan beberapa bait input di bawah tafsiran pilihannya. Tanda soal mungkin telah disisipkan oleh eksport lossy yang lebih awal, dalam hal ini aksara asal mungkin sudah tidak tersedia. Urutan à yang boleh dikenali boleh timbul dalam aliran kerja lain, tetapi halaman ini tidak mendiagnosis sejarahnya.
Jangan tentukan pengekodan sumber daripada satu nama keluarga sahaja. Periksa tetapan aplikasi pengeksport, asal fail dan pemeriksa bait yang membiarkan sumber tidak disentuh. Amaran baris pembersih berkenaan dengan penutupan petikan dan lebar lajur; ia bukan bukti bahawa pengekodan aksara adalah betul.
Penyahkodan semula, bukan cari-dan-ganti — sebab penyelesaiannya ialah membaca bait dengan pengekodan yang betul dan menulis UTF-8, dan bukannya menampal aksara satu demi satu
Pembaikan yang boleh dipercayai adalah untuk kembali kepada bait asal dan menyahkodnya sekali dengan pengekodan sumber yang didokumenkan, kemudian tulis UTF-8. Operasi itu mesti berlaku sebelum membuka melalui laluan teks UTF-8 sahaja. Menggantikan serpihan sampah yang kelihatan selepas penyahkodan boleh merosakkan kejadian yang sah dan tidak dapat membezakan beberapa aksara asal yang runtuh kepada satu pemegang tempat.
CSV Cleaner tidak mempunyai kawalan penyahkodan semula peringkat byte, jadi ia tidak dapat melaksanakan penukaran yang dijanjikan garis besar. Gunakan kaedah penukaran sedar sumber yang dipercayai, bandingkan nama wakil dengan sistem sumber, dan kemudian bawa hasil UTF-8 di sini untuk kerja pembatas, petikan, ruang kosong dan pendua.
Pulih daripada bait asal di luar alat ini; penggantian watak di sini tidak dapat memulihkannya
Untuk demonstrasi yang selamat, buat fail kecil berkod warisan yang mengandungi satu nama beraksen dan simpan salinan perenambelasan. Muatkannya ke dalam alat dan perhatikan sama ada aksara gantian muncul. Pemerhatian itu menetapkan sempadan UTF-8; ia tidak mewujudkan halaman kod asal semata-mata kerana nama yang dijangka diketahui.
Seterusnya tukarkan bait yang tidak disentuh dengan penyahkod yang dipilih secara eksplisit di luar ToolAcre, simpan UTF-8 dan muatkan hasil tersebut. Nama kini sepatutnya tiba dalam keadaan utuh sementara penghurai CSV mengendalikan pemisah seperti biasa. Membandingkan kedua-dua laluan ini memberi pengajaran yang betul tanpa mendakwa bahawa pembersih melakukan pemulihan itu sendiri.
Contoh yang berjaya: tunjukkan sempadan UTF-8 tanpa menuntut pembaikan yang tidak disokong
Fail berkod dua mungkin memerlukan pembinaan semula transformasi yang lebih awal, dan data yang telah disimpan dengan tanda soal literal mungkin tidak boleh dipulihkan tanpa sumber lain. Artikel ini tidak menetapkan pembalikan sejagat kerana pelaksanaan tidak mengandungi sejarah pengekodan atau fungsi pemulihan memelihara bait.
Ia juga mengelakkan tuntutan sokongan untuk UTF-16, pengekodan Asia Timur atau borang normalisasi. Jika perkara itu penting, pilih penukar yang menamakan dan mengujinya. Penghuraian CSV yang berjaya sahaja membuktikan mesin keadaan pembatas menemui baris; ia tidak menyatakan sama ada penyahkodan aksara sebelum peringkat itu adalah setia.
Betulkan tafsiran sekali — cara ToolAcre CSV pembaikan pengekodan Cleaner menyahkod semula dan mengekod semula eksport pada peranti anda
ToolAcre boleh menanggalkan UTF-8 BOM terkemuka dan mensiri rentetan yang terhasil sebagai UTF-8 CSV melalui laluan muat turun pelayar. Ia tidak boleh menukar bait legasi sewenang-wenangnya kepada Unicode yang betul kerana bait tersebut telah melepasi sempadan pembacaan teks tetap pelayar tanpa penyahkod yang dipilih pengguna.
Rawat tanda gantian sebagai isyarat berhenti. Kekalkan sumbernya, kenal pasti pengekodannya daripada pengeluar, tukar sekali dengan alat peka bait yang sesuai dan sahkan nama penting. Sahaja kemudian gunakan CSV Cleaner untuk kerja struktur yang sebenarnya dijanjikan oleh konfigurasinya.