CodeKitHub
Italiano
Perché la conversione da binario a testo genera caratteri errati

Perché la conversione da binario a testo genera caratteri errati

Pubblicato il 24 lug 2026

Una sequenza di 1 e 0 sembra inequivocabile: è binaria, non c’è nulla da interpretare. In pratica, la conversione da binario a testo fallisce esattamente negli stessi modi in cui fallisce quella da esadecimale a testo, per la stessa ragione di fondo: una sequenza di bit non è testo finché non si formulano diverse ipotesi su come raggrupparla e interpretarla, e se una qualsiasi di queste ipotesi è errata, si ottiene un risultato sbagliato in modo specifico e diagnosticabile.

Causa 1: raggruppamento errato dei bit (7 bit vs. 8 bit)

Lo standard ASCII richiede solo 7 bit per carattere; la maggior parte degli strumenti di conversione da binario a testo utilizza per impostazione predefinita byte a 8 bit perché è così che il testo viene effettivamente memorizzato nei sistemi reali. Se una stringa binaria è stata generata ipotizzando raggruppamenti a 7 bit (alcuni esempi da manuale e sistemi più datati lo fanno ancora) e la si decodifica come byte a 8 bit, ogni singolo carattere risulterà spostato: il confine di raggruppamento è errato fin dal primo bit, quindi la corruzione è uniforme su tutto l’output anziché iniziare correttamente per poi deteriorarsi a metà.

Il segno rivelatore: se letteralmente ogni carattere nell’output è errato, non solo alcuni, controlla l’ipotesi di raggruppamento dei bit prima di qualsiasi altra cosa.

Causa 2: un bit in più o mancante sposta tutto ciò che viene dopo

Questo è l’equivalente binario di una cifra esadecimale dispari: un singolo 0 o 1 fuori posto (un carattere in più dovuto a un copia-incolla, una cifra tralasciata, uno spazio bianco interpretato come dato) sposta il confine del byte per ogni gruppo successivo a quel punto. A differenza della causa 1, questo produce un testo che è corretto fino a un certo punto e poi distorto — un chiaro segnale che il conteggio dei bit stesso è errato in qualche punto della stringa, piuttosto che lo schema di codifica sia sbagliato in tutto il testo.

Conta prima il numero totale di bit: la lunghezza della stringa dovrebbe essere un multiplo esatto di 8 (o di 7, se hai verificato che sia quello il raggruppamento in uso). Se non lo è, il bit in eccesso o mancante è il problema, non il decodificatore.

Causa 3: codifica dei caratteri, esattamente come nel caso esadecimale

Una volta che i bit sono stati correttamente raggruppati in byte, bisogna ancora decidere cosa significhino quei valori di byte come caratteri — UTF-8, ASCII, Latin-1. Questo è identico al caso della conversione da esadecimale a testo: i caratteri UTF-8 multibyte (lettere accentate, simboli, scritture non latine) decodificati un byte alla volta, come se ogni byte fosse un carattere a sé stante, producono due o tre simboli distorti al posto di uno corretto. Se il raggruppamento dei bit risulta corretto (cause 1 e 2 escluse) e l’output è ancora errato, in particolare per quanto riguarda i caratteri non ASCII, questa è quasi sempre la causa rimanente.

Causa 4: endianness, per il binario che rappresenta numeri anziché testo

Se la stringa binaria codifica un valore numerico anziché dati di caratteri — un prefisso di lunghezza, un checksum, un ID incorporato accanto al testo — l’ordine dei bit/byte è importante e non esiste un’impostazione predefinita universale. 00000001, come byte singolo, è univoco, ma i valori numerici multibyte possono essere memorizzati con il byte più significativo per primo o con il byte meno significativo per primo a seconda del sistema che li ha generati, e leggerli partendo da un presupposto errato produce silenziosamente un numero diverso, apparentemente plausibile, anziché un errore evidente.

Procedura di diagnosi

  1. Verificare che il numero totale di bit sia un multiplo esatto del raggruppamento ipotizzato (di solito 8): un conteggio errato indica la causa 2; correggere l’input.
  2. Se ogni carattere è errato in modo uniforme fin dall’inizio, sospettare la dimensione del raggruppamento stessa (causa 1) prima di intervenire sulla codifica.
  3. Se l’output è corretto all’inizio e si deteriora a metà, ciò indica un bit errato o mancante in quella posizione (causa 2), non un problema di codifica.
  4. Se sia il raggruppamento che il numero di bit sono corretti e solo i caratteri non ASCII appaiono errati, il problema è la codifica dei caratteri (causa 3).
  5. Se i dati rappresentano un numero anziché del testo e il valore sembra plausibile ma errato, controlla l’ordine dei byte (causa 4) prima di supporre che la logica di conversione stessa sia difettosa.

Come nel caso dell’esadecimale, la fase di conversione è banale: il vero bug risiede quasi sempre in una di queste quattro ipotesi, non nel codice che esegue la conversione.

← Torna al blog