Data & spreadsheet · CSV Lebih bersih
Bagaimana UTF-8 dan Windows-1252 Menjadi Bingung: Memperbaiki Ekspor Mojibake CSV
· Cara kerjanya
csv pengkodean pembersihan data
Ketika 'José' menjadi 'José', byte-nya baik-baik saja dan interpretasinya salah. Posting ini menjelaskan bagaimana dua pengkodean paling umum bertabrakan, cara mengenali gejalanya, dan bagaimana penguraian ulang memperbaikinya.
Nama beraksen dan tanda kutip keriting berubah menjadi sup simbol — pola cerita file UTF-8 dibaca sebagai Windows-1252, dan sebaliknya
Nama pelanggan yang menjadi berlian pengganti setelah pemuatan bukan merupakan bukti bahwa CSV Pembersih mendeteksi halaman kode lama yang salah. Konfigurasi mengatakan sebaliknya: hanya UTF-8 yang dipahami, dan file Windows-1252 atau Shift-JIS dibaca sebagai UTF-8. Oleh karena itu, urutan byte yang tidak valid sudah dapat diganti sebelum parser CSV melihat karakter.
Garis besarnya berpusat pada mojibake yang familier seperti Jose, tetapi jalur baca browser menggunakan `File.text()` dan tidak menyediakan pemilih pengkodean. Artikel ini mengoreksi janji itu. Gejala yang dapat ditindaklanjuti di dalam alat ini adalah karakter pengganti atau teks rusak, dengan byte file asli disimpan untuk pemulihan di tempat lain.
File non-UTF-8 mencapai alat ini sebagai karakter pengganti, bukan pola mojibake yang terverifikasi
File yang dibatasi adalah byte pada disk, sedangkan parser beroperasi pada string JavaScript. Pengkodean mendefinisikan pemetaan antara lapisan-lapisan tersebut. CSV sintaks memberi nama koma, tanda kutip, dan batas rekaman tetapi tidak membawa deklarasi pada disk yang dapat diandalkan yang memberi tahu `File.text()` pemetaan warisan mana yang dibuat setiap byte non-ASCII.
Setelah decoding menghasilkan karakter pengganti U+FFFD, operasi CSV selanjutnya menerima placeholder tersebut sebagai teks biasa. Memangkas atau mengekspor tidak dapat menyimpulkan urutan byte atau karakter asli mana yang ada di sana. Itulah sebabnya sumber yang belum tersentuh lebih penting daripada daftar cari dan ganti yang dikumpulkan dari layar yang rusak.
Dua tersangka yang umum — urutan multi-byte UTF-8 dan byte tunggal Windows-1252, dan mengapa keduanya menghasilkan sampah yang dapat diprediksi saat ditukar
UTF-8 mewakili karakter non-ASCII dengan urutan multibyte. Windows-1252 menetapkan banyak karakter Barat ke nilai byte individual. Membaca satu konvensi di bawah konvensi lain dapat gagal atau membuat teks menyesatkan, namun rute ini tidak menguji dekoder alternatif, menilai bahasa yang masuk akal, atau menawarkan pilihan Windows-1252.
Satu-satunya perilaku parser khusus pengkodean adalah penghapusan tanda urutan byte U+FEFF UTF-8 terkemuka setelah decoding teks. Itu mencegah penanda bergabung dengan header pertama. Ini bukan deteksi pengkodean umum dan tidak memberikan dukungan untuk Shift-JIS, UTF-16 atau halaman kode regional yang tidak disebutkan di mana pun dalam implementasi.
ToolAcre menerima teks UTF-8 dan tidak membandingkan kandidat Windows-1252
Karakter pengganti menunjukkan bahwa dekoder teks tidak dapat memetakan beberapa byte masukan berdasarkan interpretasi yang dipilihnya. Tanda tanya mungkin telah disisipkan oleh ekspor yang hilang sebelumnya, dalam hal ini karakter aslinya mungkin sudah tidak tersedia. Urutan à yang dapat dikenali dapat muncul di alur kerja lain, namun halaman ini tidak mendiagnosis riwayatnya.
Jangan memutuskan sumber pengkodean dari satu nama keluarga saja. Periksa pengaturan aplikasi pengekspor, asal file, dan pemeriksa byte-aware yang membiarkan sumbernya tidak tersentuh. Peringatan baris pembersih berkaitan dengan penutupan kutipan dan lebar kolom; itu bukan bukti bahwa pengkodean karakter benar.
Mendekode ulang, bukan mencari dan mengganti — mengapa perbaikannya adalah membaca byte dengan pengkodean yang benar dan menulis UTF-8, daripada menambal karakter satu per satu
Perbaikan yang dapat diandalkan adalah kembali ke byte asli dan mendekodekannya satu kali dengan pengkodean sumber yang terdokumentasi, lalu menulis UTF-8. Operasi itu harus dilakukan sebelum membuka melalui jalur teks khusus UTF-8. Mengganti fragmen sampah yang terlihat setelah decoding dapat merusak kejadian yang sah dan tidak dapat membedakan beberapa karakter asli yang diciutkan ke satu placeholder.
CSV Pembersih tidak memiliki kontrol pengodean ulang tingkat byte, sehingga tidak dapat melakukan konversi yang dijanjikan pada garis besar. Gunakan metode konversi sadar sumber tepercaya, bandingkan nama perwakilan dengan sistem sumber, lalu bawa hasil UTF-8 ke sini untuk pekerjaan pembatas, kutipan, spasi, dan duplikat.
Pulihkan dari byte asli di luar alat ini; penggantian karakter di sini tidak dapat memulihkannya
Untuk demonstrasi yang aman, buat file kecil berkode lama yang berisi satu nama beraksen dan simpan salinan heksadesimal. Muat ke dalam alat dan amati apakah karakter pengganti muncul. Pengamatan tersebut menetapkan batas UTF-8; itu tidak membuat halaman kode asli hanya karena nama yang diharapkan diketahui.
Selanjutnya konversikan byte yang belum tersentuh dengan dekoder yang dipilih secara eksplisit di luar ToolAcre, simpan UTF-8, dan muat hasilnya. Nama tersebut sekarang akan tiba secara utuh sementara parser CSV menangani pemisah secara normal. Membandingkan kedua jalur ini memberikan pelajaran yang benar tanpa mengklaim bahwa petugas kebersihan melakukan pemulihan itu sendiri.
Contoh praktis: mendemonstrasikan batas UTF-8 tanpa mengklaim perbaikan yang tidak didukung
File berkode ganda mungkin memerlukan rekonstruksi transformasi sebelumnya, dan data yang sudah disimpan dengan tanda tanya literal mungkin tidak dapat dipulihkan tanpa sumber lain. Artikel ini tidak menentukan pembalikan universal karena penerapannya tidak berisi riwayat pengkodean atau fungsi pemulihan pelestarian byte.
Hal ini juga menghindari klaim dukungan untuk UTF-16, bentuk pengkodean atau normalisasi Asia Timur. Jika itu penting, pilih konverter yang memberi nama dan mengujinya. Penguraian CSV yang berhasil hanya membuktikan bahwa mesin status pembatas menemukan baris; ia tidak mengatakan apa pun tentang apakah penguraian kode karakter sebelum tahap itu benar.
Perbaiki interpretasinya satu kali — bagaimana perbaikan pengkodean ToolAcre CSV Pembersih mendekode ulang dan mengkodekan ulang ekspor pada perangkat Anda
ToolAcre dapat menghapus UTF-8 BOM di depannya dan membuat serial string yang dihasilkan sebagai UTF-8 CSV melalui jalur unduhan browser. Itu tidak dapat mengubah byte lama yang sewenang-wenang menjadi Unicode yang benar karena byte tersebut telah melewati batas pembacaan teks tetap browser tanpa dekoder yang dipilih pengguna.
Perlakukan tanda penggantian sebagai sinyal berhenti. Pertahankan sumbernya, identifikasi pengkodeannya dari produsen, konversikan sekali dengan alat byte-aware yang sesuai, dan verifikasi nama-nama penting. Baru kemudian gunakan CSV Cleaner untuk pekerjaan struktural yang sebenarnya dijanjikan oleh konfigurasinya.