
Zašto vaša pretvorba binarnog u tekst daje pogrešne znakove
Objavljeno 24. srp 2026.
Niz nula i jedinica djeluje nedvosmisleno — binaran je, nema se što tumačiti. U praksi, pretvorba binarnog u tekst ne uspijeva na istoj obitelji načina kao i pretvorba heksadecimalnog u tekst, iz istog temeljnog razloga: niz bitova nije tekst dok ne donesete nekoliko pretpostavki o tome kako ga grupirati i tumačiti, a pogrešna pretpostavka bilo koje od njih daje izlaz koji je pogrešan na specifičan, dijagnosticirljiv način.
Uzrok 1: pogrešno grupiranje bitova (7-bitno naspram 8-bitno)
Standardni ASCII treba samo 7 bitova po znaku; većina alata za pretvorbu binarnog u tekst zadano koristi 8-bitne bajtove jer se tako tekst zapravo pohranjuje na stvarnim sustavima. Ako je binarni niz generiran uz pretpostavku 7-bitnog grupiranja (neki primjeri iz udžbenika i stariji sustavi i dalje to rade), a vi ga dekodirate kao 8-bitne bajtove, svaki znak izađe pomaknut — granica grupiranja je pogrešna od samog prvog bita, pa je iskrivljenje ujednačeno kroz cijeli izlaz umjesto da počne čisto i degradira se postupno.
Znak raspoznavanja: ako je doslovno svaki znak u izlazu pogrešan, ne samo neki, prvo provjerite pretpostavku o grupiranju bitova prije bilo čega drugog.
Uzrok 2: dodatni ili nedostajući bit pomiče sve nakon njega
Ovo je binarni ekvivalent neparne heksadecimalne znamenke — jedan zalutali 0 ili 1 (dodatni znak iz kopiranja-lijepljenja, ispuštena znamenka, razmak koji je pogrešno protumačen kao podatak) pomiče granicu bajta za svaku grupu nakon te točke. Za razliku od uzroka 1, ovo daje tekst koji je ispravan do određene točke, a zatim iskrivljen — snažan signal da je sam broj bitova negdje u nizu pogrešan, a ne da je shema kodiranja pogrešna u cijelosti.
Prvo prebrojite ukupan broj bitova: duljina niza trebala bi biti čist višekratnik broja 8 (ili 7, ako ste potvrdili da je to grupiranje u upotrebi). Ako nije, dodatni ili nedostajući bit je greška, ne dekoder.
Uzrok 3: kodiranje znakova, potpuno isto kao kod heksadecimalnog
Kad su bitovi ispravno grupirani u bajtove, i dalje morate odlučiti što te vrijednosti bajtova znače kao znakovi — UTF-8, ASCII, Latin-1. Ovo je identično slučaju s heksadecimalnim: višebajtni UTF-8 znakovi (naglašena slova, simboli, ne-latinična pisma) dekodirani bajt po bajt kao da je svaki bajt zaseban znak proizvode dva ili tri iskrivljena simbola umjesto jednog ispravnog. Ako je grupiranje bitova potvrđeno ispravno (uzroci 1 i 2 isključeni), a izlaz je i dalje pogrešan konkretno oko ne-ASCII znakova, ovo je gotovo uvijek preostali uzrok.
Uzrok 4: endianness, za binarne podatke koji predstavljaju brojeve, a ne tekst
Ako binarni niz kodira brojčanu vrijednost umjesto znakovnih podataka — prefiks duljine, kontrolni zbroj, ID ugrađen uz tekst — redoslijed bitova/bajtova je bitan i ne postoji univerzalna zadana postavka. 00000001 kao samostalan bajt je nedvosmislen, ali višebajtne brojčane vrijednosti mogu biti pohranjene s najznačajnijim bajtom prvo ili najmanje značajnim bajtom prvo, ovisno o sustavu koji ih je proizveo, a čitanje uz pogrešnu pretpostavku tiho daje drugačiji, uvjerljivo izgledajući, ali pogrešan broj umjesto očite greške.
Dijagnosticiranje po redu
- Provjerite je li ukupan broj bitova čist višekratnik pretpostavljenog grupiranja (obično 8) — pogrešan broj znači uzrok 2, ispravite ulaz.
- Ako je svaki znak ujednačeno pogrešan od samog početka, posumnjajte na samu veličinu grupiranja (uzrok 1) prije nego dirate kodiranje.
- Ako je izlaz čist na početku, a degradira se dijelom kasnije, to precizno ukazuje na zalutali/nedostajući bit na tom mjestu (uzrok 2), ne na problem s kodiranjem.
- Ako su grupiranje i broj bitova u redu, a samo ne-ASCII znakovi izgledaju pogrešno, riječ je o kodiranju znakova (uzrok 3).
- Ako podaci predstavljaju broj umjesto teksta, a vrijednost izgleda uvjerljivo ali pogrešno, provjerite redoslijed bajtova (uzrok 4) prije nego pretpostavite da je logika pretvorbe sama po sebi neispravna.
Kao i kod heksadecimalnog, sam korak pretvorbe je trivijalan — stvarna greška gotovo uvijek živi u jednoj od ove četiri pretpostavke, ne u kodu koji obavlja pretvorbu.