Video & sari kata · Kit Alat Sari kata
Mengapa é menjadi é dalam sari kata: pengekodan teks dan cara pelayar menyahkodnya
· Bagaimana ia berfungsi
sari kata pengekodan aksara pemprosesan pelayar
Mojibake dalam sari kata hampir selalu merupakan ketidakpadanan pengekodan. Siaran ini menerangkan cara bait menjadi aksara, sebab UTF-8 dan halaman kod Windows lama tidak bersetuju dan cara alat berasaskan pelayar menyahkod fail tanpa menghantarnya ke mana-mana.
Aksen adalah sampah tetapi masanya adalah sempurna — bagaimana masalah pengekodan muncul dengan sendirinya
Beritanya ialah segala-galanya kecuali watak-wataknya baik-baik saja. Pemasaan adalah tepat, susunan kiu adalah betul, fail dimuatkan, dan sahaja huruf beraksen yang salah. Gabungan itu menolak kesilapan struktur, kerana penghurai yang tidak dapat membaca fail tidak akan menghasilkan pemasaan yang betul. Apa yang salah berlaku sebelum menghuraikan, apabila jujukan bait diubah menjadi jujukan aksara.
Ini juga menerangkan sebab kesilapan sering muncul separuh jalan melalui aliran kerja dan bukannya pada sumber. Fail yang kelihatan betul dalam satu editor boleh kelihatan salah pada yang seterusnya, tanpa sebarang perubahan di antaranya. Tiada apa-apa yang mengubahnya; program kedua membuat andaian berbeza tentang maksud bait.
Bait berbanding aksara — mengapa bait yang sama boleh dibaca sebagai 'é' atau 'é' bergantung pada penyahkod
Fail pada cakera ialah bait. Aksara sahaja wujud sebaik sahaja sesuatu menggunakan pengekodan, iaitu jujukan bait pemetaan jadual kepada aksara. UTF-8 mewakili huruf Latin beraksen seperti e-acute sebagai dua bait. Windows-1252 mewakili huruf yang sama sebagai bait tunggal, dan memberikan dua UTF-8 bait makna yang sama sekali berbeza: yang pertama ialah huruf besar A dengan tilde dan yang kedua ialah tanda hak cipta.
Jadi pasangan kacau yang biasa bukan rasuah. Ia adalah bacaan yang setia dan tanpa kerugian bagi bait yang betul di bawah jadual yang salah. Setiap bait terselamat; sahaja tafsiran yang berubah. Itulah sebabnya kerosakan biasanya boleh diterbalikkan, dan mengapa ia patut mengenal pasti arah mana yang tidak sepadan itu pergi daripada mengedit tangan aksara yang boleh dilihat.
UTF-8, Windows-1252 dan rakan — fail sari kata pengekodan sebenarnya muncul dalam
Fail sari kata muncul dalam sebilangan kecil pengekodan. UTF-8 ialah lalai moden dan satu-satunya yang dibenarkan oleh WebVTT. Windows-1252 adalah perkara biasa dalam fail yang dihasilkan oleh perkakas Eropah Barat yang lebih lama, dan saudara terdekatnya ISO-8859-1 merangkumi banyak perkara yang sama. Fail daripada sumber Eropah Tengah, Cyrillic atau Greek muncul dalam halaman kod Windows yang sepadan, dan bahan Asia Timur menambah beberapa lagi.
Tiada pengekodan ini merekodkan identiti mereka sendiri di dalam fail. Fail SRT tidak mengandungi pengisytiharan pengekodan yang digunakan untuk menulisnya, yang merupakan punca kepada keseluruhan masalah: pembaca perlu membuat keputusan, dan tiada apa-apa yang berwibawa untuk dibaca.
Tanda pesanan bait — petunjuk berguna untuk sesetengah pemain dan gangguan yang boleh dilihat pada orang lain
Tanda pesanan bait ialah satu pengecualian separa. Ia ialah watak khusus pada permulaan fail yang, apabila ada, menandakan pengekodan. Ia membantu sesetengah pemain dan muncul pada orang lain sebagai watak sesat sebelum indeks sari kata pertama, itulah sebabnya fail yang membawa seseorang boleh gagal dalam satu program dan berfungsi di tempat lain.
Penghurai memotongnya sebelum melakukan apa-apa lagi, kerana tanda yang ditinggalkan di tempat melekat pada nombor indeks pertama dan menelan kos isyarat pertama. Pengesanan format ditulis untuk bertolak ansur juga, jadi fail WebVTT yang bermula dengan tanda sebelum pengepalanya masih dikenali sebagai WebVTT dan bukannya dianggap sebagai SRT.
Cara pelayar menyahkod fail secara setempat — TextDecoder API dan sebab pengesanan adalah tekaan apabila tiada pengekodan diisytiharkan
Apabila alat memuatkan fail ia memanggil kaedah teks Fail API dan kaedah itu ditentukan untuk menyahkod sebagai UTF-8. Tiada parameter pengekodan dan tiada rundingan. Fail yang benar-benar UTF-8 dibaca dengan betul; fail Windows-1252 yang mengandungi huruf beraksen bait tunggal membentangkan bait yang tidak boleh memulakan urutan UTF-8 yang sah dan penyahkod menggantikan aksara gantian daripada meneka.
Ini patut diketahui kerana ia mengubah simptom. Membaca fail UTF-8 dengan jadual warisan menghasilkan garble dua aksara yang biasa. Membaca fail warisan sebagai UTF-8 menghasilkan aksara gantian, berlian hitam atau kotak kosong. Penyahkodan sebagai sesuatu selain daripada UTF-8 memerlukan penamaan pengekodan secara eksplisit melalui penyahkod pelayar API, dan menamakannya adalah bahagian yang sukar: tanpa pengisytiharan dalam fail, sebarang pilihan automatik adalah inferens daripada corak bait, yang merupakan tekaan yang biasanya betul dan kadangkala yakin salah.
Contoh yang berjaya: menyelamatkan fail Windows-1252 — mengenal pasti pengekodan sumber dan menyimpannya semula sebagai UTF-8 sebelum penukaran
Untuk menyelamatkan fail warisan, lakukan penukaran sebelum kerja sari kata dan bukannya selepas itu. Bukanya dalam editor yang membolehkan anda menyatakan pengekodan pada kedua-dua belah pihak, beritahunya untuk membuka semula fail sebagai Windows-1252 dan sahkan aksara beraksen muncul dengan betul. Jika mereka melakukannya, sangkaan itu betul. Kemudian simpan fail secara eksplisit sebagai UTF-8.
Sahkan pada baris yang anda boleh ramalkan dan bukannya pada fail secara keseluruhan. Pilih isyarat yang mengandungi aksen yang anda tahu sepatutnya ada dan semaknya dalam output yang ditukar. Melakukan perkara ini terlebih dahulu bermakna alat sari kata menerima fail yang baitnya sudah sepadan dengan pengekodan yang akan diandaikan dan langkah penukaran tiada apa-apa lagi untuk salah.
Perkara yang tidak dilindungi ini — fail rosak oleh dua pusingan penukaran yang salah, di mana bait asal sudah hilang
Fail yang telah melalui dua penukaran yang salah adalah masalah yang berbeza. Jika fail disalah baca dan kemudian disimpan dalam keadaan salah baca itu, aksara yang salah telah ditulis sebagai aksara sebenar dan bait asal tidak lagi wujud di mana-mana sahaja di dalamnya. Pada ketika itu tiada apa-apa untuk ditafsirkan semula, kerana fail itu kini benar-benar mengandungi teks bercelaru.
Kes tersebut kadangkala boleh dipulihkan dengan membalikkan urutan tepat pengekodan yang tersilap, tetapi sahaja apabila setiap langkah diketahui dan tiada maklumat langkah yang hilang. Satu bait yang menjadi aksara gantian hilang secara kekal: penggantian ialah satu aksara yang berdiri untuk bait yang tidak dapat digunakan oleh penyahkod dan ia tidak merekodkan bait itu. Pembetulan yang boleh dipercayai adalah untuk kembali ke fail asal.
Bawa pulang: standardkan pada UTF-8 sebelum anda menukar — cara Kit Alat Sari kata berfungsi pada fail anda dalam pelayar dan sebab output WebVTT ialah UTF-8 mengikut definisi
Seragamkan pada UTF-8 sebelum menukar apa-apa. Fail itu sendiri tidak membawa kenyataan pengekodannya, jadi setiap program yang membukanya membuat andaian, dan cara untuk menghentikan andaian yang tidak bersetuju adalah dengan menjadikan semuanya betul. WebVTT mengalih keluar kekaburan mengikut definisi, kerana format memerlukan UTF-8, yang merupakan satu sebab praktikal untuk menukar SRT kepada WebVTT untuk penghantaran web.
Penukaran dijalankan pada fail dalam tab pelayar. Semak keputusan pada baris yang aksennya boleh anda ramalkan daripada mengimbas apa-apa yang kelihatan salah, kerana fail dengan segelintir perkataan beraksen dalam sembilan ratus isyarat mudah ditandatangani tanpa memeriksa bahagian yang akan gagal.