Caratteri di controllo ASCII, LF e CR: cosa sono e come trovare quelli invisibili

Nella tabella ASCII i primi 32 codici, da 0 a 31, più il codice 127, non sono lettere ma comandi: dicono a una stampante, a un terminale o a un programma di andare a capo, tabulare, suonare, terminare. Molti sono ancora vivi oggi e certi sono invisibili, come lo spazio non separabile, che possono rovinare un testo senza che tu li veda. Per vederli all'opera c'è lo strumento Tabella ASCII.

Cosa sono i caratteri di controllo

Quando nacque l'ASCII, il testo veniva spesso trasmesso a telescriventi e stampanti, che avevano bisogno di istruzioni oltre alle lettere. Per questo i valori da 0 a 31 (e il 127, DEL) furono riservati ai caratteri di controllo: non hanno un disegno, producono un'azione. Gran parte delle funzioni originali è caduta in disuso, ma alcuni codici restano fondamentali.

CodiceSiglaNomeA cosa serve oggi
0NULNullTerminatore di stringa in molti linguaggi (per esempio il C)
7BELCampanelloFa suonare l'avviso del terminale
8BSBackspaceTorna indietro di un carattere
9TABTabulazione orizzontaleAllinea il testo; separatore nei file TSV
10LFLine FeedA capo (Unix, Linux, macOS)
13CRCarriage ReturnRitorno a inizio riga (parte dell'a capo di Windows)
27ESCEscapeInizio delle sequenze di comando dei terminali (colori, cursore)
127DELDeleteCancellazione, oggi dipende dal programma

Tutti gli altri codici da 0 a 31 hanno una sigla e una funzione storica che puoi consultare con il filtro Controllo dello strumento Tabella ASCII.

A capo: LF, CR e CRLF

Sulle macchine da scrivere andare a capo richiedeva due gesti: far scorrere il foglio di una riga (Line Feed) e riportare il carrello a sinistra (Carriage Return). I sistemi informatici hanno poi scelto strade diverse:

Oggi la differenza si nota quando un file passa da un sistema all'altro. Un testo con a capo Windows aperto in un programma Unix mostra spesso ^M a fine riga; un file con soli LF aperto in vecchi programmi Windows può apparire come una sola riga lunga. La maggior parte degli editor moderni riconosce tutti e tre i formati e permette di convertirli. Se ti serve contare le righe di un testo, usa il contatore di righe.

Il tab e gli altri controlli che usi senza saperlo

Il tasto Tab produce il carattere 9. Nei file TSV (valori separati da tabulazione) e nei dati copiati da fogli di calcolo separa le colonne: se incolli una tabella in un campo di testo e vedi spazi larghi, sono tabulazioni. Il codice 27 (ESC) è invece alla base delle sequenze con cui i terminali cambiano colore o spostano il cursore: se in un file di log vedi cose come [31m preceduto da un simbolo strano, è un colore del terminale rimasto nel testo.

Caratteri invisibili che rompono i testi

Oltre ai controlli ASCII, Unicode contiene molti caratteri che non si vedono ma occupano posto e interferiscono con ricerche, confronti e importazioni:

CarattereCode pointCosa faProblema tipico
Spazio non separabileU+00A0Spazio che impedisce l'a capoNon è riconosciuto come spazio normale da molte ricerche e funzioni di pulizia
Zero-width spaceU+200BSpazio di larghezza zeroParole che sembrano uguali ma non coincidono; link o codici che non funzionano
BOMU+FEFFMarcatore di codifica a inizio fileCarattere fantasma all'inizio di un file o di una cella; errori in script e intestazioni
Soft hyphenU+00ADTrattino che compare solo a fine rigaCompare nel testo copiato e altera ricerche e confronti

Questi caratteri arrivano quasi sempre da copia e incolla da pagine web, PDF, documenti Word o chat. Sintomi tipici: due parole identiche che il foglio di calcolo non riconosce come uguali, un campo che supera il limite di lunghezza senza motivo, un modulo che rifiuta un codice. Il BOM merita una nota a parte: sono tre byte (EF BB BF) in UTF-8, ne parliamo anche in ASCII, Unicode e UTF-8: le differenze.

Come trovarli e ripulirli

  1. Incolla il testo nella scheda Analizza testo dello strumento Tabella ASCII: il conteggio dei caratteri invisibili e l'elenco con il nome di ciascuno ti dicono cosa c'è.
  2. Confronta il numero di caratteri che ti aspettavi con quello reale: una differenza è un indizio.
  3. Elimina o sostituisci quelli indesiderati. Per gli spazi in eccesso puoi usare lo strumento rimuovi spazi; per altri caratteri, un editor con ricerca e sostituzione o l'opzione per mostrare i caratteri nascosti.
  4. Se il testo deve restare solo ASCII, la stessa scheda permette di eliminare i caratteri non ASCII o di togliere gli accenti.

Dopo la pulizia ricontrolla, perché alcuni programmi rimuovono solo gli spazi con codice 32 e lasciano quelli invisibili al loro posto.

Domande frequenti

Che differenza c'è tra LF e CR?
LF (Line Feed, codice 10) significa passa alla riga successiva; CR (Carriage Return, codice 13) significa torna all'inizio della riga. Il nome viene dalle macchine da scrivere e dalle telescriventi. Windows usa la coppia CR+LF, Linux e macOS moderno solo LF, i vecchi Mac OS classici solo CR.
Perché il mio file ha righe che finiscono con ^M?
Quel simbolo rappresenta il carattere CR (Ctrl+M). Compare quando un file con a capo Windows (CRLF) viene aperto in un programma Unix che si aspetta solo LF. Si risolve convertendo gli a capo, con l'opzione di fine riga dell'editor o con un apposito comando.
Come faccio a sapere se un testo contiene caratteri invisibili?
Incollalo nella scheda Analizza testo dello strumento Tabella ASCII: conta i caratteri non ASCII e segnala quelli invisibili, come tabulazioni, spazi non separabili e spazi di larghezza zero, indicando il nome di ciascuno.
Lo spazio non separabile è uguale a uno spazio normale?
Visivamente sì, ma è un carattere diverso (U+00A0, 160 in Latin-1). Impedisce l'a capo in quel punto. Molte funzioni di confronto, ricerca o pulizia che cercano lo spazio normale (codice 32) non lo riconoscono, ed è una causa frequente di corrispondenze che sembrano giuste e non lo sono.
Che cos'è il carattere DEL (127)?
È l'ultimo carattere di controllo dell'ASCII, usato storicamente per cancellare un carattere sui nastri perforati, dove forare tutti i bit annullava il dato. Oggi la sua funzione dipende dal programma: in genere non produce testo visibile.

← Tutte le guide