
Proč váš převod binárního kódu na text dává špatné znaky
Publikováno 24. 7. 2026
Řetězec jedniček a nul vypadá jednoznačně — je to binární kód, není co interpretovat. V praxi převod binárního kódu na text selhává úplně stejnou rodinou způsobů jako převod hex na text, a to ze stejného základního důvodu: posloupnost bitů není text, dokud neuděláte několik předpokladů o tom, jak ji seskupit a interpretovat — a když je kterýkoli z nich špatně, výstup je špatně specifickým, diagnostikovatelným způsobem.
Příčina 1: špatné seskupení bitů (7 bitů vs. 8 bitů)
Standardní ASCII potřebuje jen 7 bitů na znak; většina nástrojů pro převod binárního kódu na text má jako výchozí 8bitové bajty, protože tak se text na reálných systémech skutečně ukládá. Pokud byl binární řetězec vytvořen s předpokladem 7bitových skupin (některé učebnicové příklady a starší systémy to pořád dělají) a vy ho dekódujete jako 8bitové bajty, vyjde každý jednotlivý znak posunutý — hranice seskupení je špatně už od úplně prvního bitu, takže poškození je rovnoměrné po celém výstupu, místo aby začínalo čistě a rozpadalo se v průběhu.
Poznávací znak: pokud je špatně doslova každý znak výstupu, ne jen některé, zkontrolujte předpoklad seskupení bitů dřív než cokoli jiného.
Příčina 2: bit navíc nebo chybějící bit posune všechno za sebou
Tohle je binární obdoba liché hexové číslice — jediná zatoulaná 0 nebo 1 (znak navíc z copy-paste, ztracená číslice, mezera, která se zpracovala jako data) posune hranici bajtu pro každou skupinu za tím místem. Na rozdíl od příčiny 1 tohle vytváří text, který je do určitého bodu správně a pak rozsypaný — silný signál, že je někde v řetězci špatně samotný počet bitů, ne že by bylo špatně kódovací schéma jako celek.
Nejdřív spočítejte celkový počet bitů: délka řetězce by měla být čistým násobkem 8 (nebo 7, pokud jste si potvrdili, že se používá tohle seskupení). Pokud není, je chybou ten bit navíc nebo chybějící bit, ne dekodér.
Příčina 3: kódování znaků, přesně jako u hexu
Jakmile jsou bity správně seskupené do bajtů, pořád musíte rozhodnout, co ty hodnoty bajtů znamenají jako znaky — UTF-8, ASCII, Latin-1. Je to identické s případem hex na text: vícebajtové znaky UTF-8 (písmena s diakritikou, symboly, nelatinková písma) dekódované bajt po bajtu, jako by každý bajt byl samostatný znak, vytvoří dva až tři rozsypané symboly místo jednoho správného. Pokud je seskupení bitů potvrzené jako správné (příčiny 1 a 2 vyloučeny) a výstup je pořád špatně konkrétně kolem ne-ASCII znaků, je to téměř vždy tahle zbývající příčina.
Příčina 4: endianita — u binárního kódu představujícího čísla, ne text
Pokud binární řetězec kóduje číselnou hodnotu, a ne znaková data — prefix délky, kontrolní součet, ID vložené vedle textu — záleží na pořadí bitů/bajtů a žádný univerzální výchozí stav neexistuje. 00000001 jako samostatný bajt je jednoznačný, ale vícebajtové číselné hodnoty mohou být uložené od nejvýznamnějšího, nebo od nejméně významného bajtu podle systému, který je vytvořil, a čtení se špatným předpokladem potichu vyprodukuje jiné, věrohodně vypadající špatné číslo místo zjevné chyby.
Diagnostika popořadě
- Zkontrolujte, že celkový počet bitů je čistým násobkem předpokládaného seskupení (obvykle 8) — nesedící počet znamená příčinu 2, opravte vstup.
- Pokud je každý znak rovnoměrně špatně už od začátku, podezírejte samotnou velikost seskupení (příčina 1), než sáhnete na kódování.
- Pokud je výstup zpočátku čistý a rozpadá se v průběhu, ukazuje to přesně na zatoulaný/chybějící bit na té pozici (příčina 2), ne na problém s kódováním.
- Pokud seskupení i počet bitů sedí a špatně vypadají jen ne-ASCII znaky, jde o kódování znaků (příčina 3).
- Pokud data představují číslo, a ne text, a hodnota vypadá věrohodně, ale je špatně, zkontrolujte pořadí bajtů (příčina 4), než začnete předpokládat, že je rozbitá samotná převodní logika.
Stejně jako u hexu je samotný převodní krok triviální — skutečná chyba téměř vždy sídlí v jednom z těchto čtyř předpokladů, ne v kódu, který převod provádí.