CodeKitHub
Kenapa penukaran binari ke teks anda menghasilkan aksara yang salah

Kenapa penukaran binari ke teks anda menghasilkan aksara yang salah

Diterbitkan pada 24 Jul 2026

Rentetan 1 dan 0 kelihatan tidak berbelah bahagi — ia binari, tiada apa untuk ditafsir. Pada hakikatnya, menukar binari ke teks gagal dengan cara yang sama seperti hex ke teks, atas sebab asas yang sama: turutan bit bukan teks sehingga anda telah membuat beberapa andaian tentang cara mengelompok dan mentafsirnya, dan tersalah pada mana-mana satu andaian itu menghasilkan output yang salah dengan cara tertentu dan boleh didiagnosis.

Punca 1: pengelompokan bit yang salah (7-bit lawan 8-bit)

ASCII piawai hanya memerlukan 7 bit setiap aksara; kebanyakan alat binari-ke-teks lalai kepada bait 8-bit kerana itulah cara teks sebenarnya disimpan pada sistem sebenar. Jika rentetan binari dijana dengan andaian pengelompokan 7-bit (sesetengah contoh buku teks dan sistem lama masih melakukan ini) dan anda menyahkodnya sebagai bait 8-bit, setiap aksara keluar tersasar — sempadan pengelompokan salah sejak bit pertama, jadi kerosakan itu seragam di seluruh output dan bukannya bermula bersih dan merosot separuh jalan.

Petunjuknya: jika secara literal setiap aksara dalam output salah, bukan hanya sebahagian, semak andaian pengelompokan bit sebelum apa-apa lagi.

Punca 2: satu bit tambahan atau hilang menyasarkan segala-galanya selepasnya

Ini adalah setara binari kepada digit hex yang ganjil — satu 0 atau 1 tersasar (aksara tambahan daripada salin-tampal, digit jatuh, ruang kosong yang dihurai sebagai data) menyasarkan sempadan bait untuk setiap kumpulan selepas titik itu. Berbeza daripada punca 1, ini menghasilkan teks yang betul setakat satu titik dan kacau selepasnya — isyarat kukuh bahawa bilangan bit itu sendiri salah di suatu tempat dalam rentetan dan bukannya skema pengekodan yang salah sepanjangnya.

Kira jumlah bit dahulu: panjang rentetan sepatutnya gandaan bersih 8 (atau 7, jika anda telah mengesahkan itulah pengelompokan yang digunakan). Jika tidak, bit tambahan atau hilang itu adalah pepijatnya, bukan penyahkod.

Punca 3: pengekodan aksara, sama seperti hex

Sebaik sahaja bit dikelompokkan dengan betul menjadi bait, anda masih perlu menentukan apa maksud nilai bait itu sebagai aksara — UTF-8, ASCII, Latin-1. Ini sama seperti kes hex-ke-teks: aksara UTF-8 pelbagai-bait (huruf beraksen, simbol, skrip bukan Latin) yang dinyahkod satu bait pada satu masa seolah-olah setiap bait adalah aksaranya sendiri menghasilkan dua atau tiga simbol kacau menggantikan satu yang betul. Jika pengelompokan bit disahkan betul (punca 1 dan 2 disingkirkan) dan output masih salah khususnya di sekitar aksara bukan-ASCII, ini hampir selalu punca yang tinggal.

Punca 4: endianness, untuk binari yang mewakili nombor dan bukan teks

Jika rentetan binari mengekod nilai berangka dan bukan data aksara — awalan panjang, checksum, ID yang dibenamkan bersama teks — susunan bit/bait penting dan tiada lalai universal. 00000001 sebagai bait berdiri sendiri tidak berbelah bahagi, tetapi nilai berangka pelbagai-bait boleh disimpan dengan bait paling ketara-dahulu atau bait paling tidak ketara-dahulu bergantung pada sistem yang menghasilkannya, dan membacanya dengan andaian yang salah secara senyap menghasilkan nombor lain yang kelihatan munasabah tetapi salah dan bukannya ralat yang jelas.

Mendiagnosis mengikut susunan

  1. Semak jumlah bilangan bit adalah gandaan bersih pengelompokan yang diandaikan (biasanya 8) — bilangan yang salah bermaksud punca 2, betulkan input.
  2. Jika setiap aksara salah secara seragam sejak permulaan, syak saiz pengelompokan itu sendiri (punca 1) sebelum menyentuh pengekodan.
  3. Jika output bersih pada mulanya dan merosot separuh jalan, itu menunjukkan bit tersasar/hilang pada kedudukan itu (punca 2), bukan masalah pengekodan.
  4. Jika pengelompokan dan bilangan bit kedua-duanya betul dan hanya aksara bukan-ASCII yang kelihatan salah, itu adalah pengekodan aksara (punca 3).
  5. Jika data mewakili nombor dan bukan teks dan nilainya kelihatan munasabah tetapi salah, semak susunan bait (punca 4) sebelum menganggap logik penukaran itu sendiri rosak.

Sama seperti hex, langkah penukaran itu remeh — pepijat sebenar hampir selalu terletak pada salah satu daripada empat andaian ini, bukan dalam kod yang melakukan penukaran itu.

← Kembali ke blog