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.
| Codice | Sigla | Nome | A cosa serve oggi |
|---|---|---|---|
| 0 | NUL | Null | Terminatore di stringa in molti linguaggi (per esempio il C) |
| 7 | BEL | Campanello | Fa suonare l'avviso del terminale |
| 8 | BS | Backspace | Torna indietro di un carattere |
| 9 | TAB | Tabulazione orizzontale | Allinea il testo; separatore nei file TSV |
| 10 | LF | Line Feed | A capo (Unix, Linux, macOS) |
| 13 | CR | Carriage Return | Ritorno a inizio riga (parte dell'a capo di Windows) |
| 27 | ESC | Escape | Inizio delle sequenze di comando dei terminali (colori, cursore) |
| 127 | DEL | Delete | Cancellazione, 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:
- Windows: CR+LF, cioè i due byte 13 e 10, scritti anche
\r\n. - Unix, Linux e macOS moderno: solo LF, il byte 10, scritto
\n. - Mac OS classico (precedente a macOS): solo CR, il byte 13, scritto
\r.
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:
| Carattere | Code point | Cosa fa | Problema tipico |
|---|---|---|---|
| Spazio non separabile | U+00A0 | Spazio che impedisce l'a capo | Non è riconosciuto come spazio normale da molte ricerche e funzioni di pulizia |
| Zero-width space | U+200B | Spazio di larghezza zero | Parole che sembrano uguali ma non coincidono; link o codici che non funzionano |
| BOM | U+FEFF | Marcatore di codifica a inizio file | Carattere fantasma all'inizio di un file o di una cella; errori in script e intestazioni |
| Soft hyphen | U+00AD | Trattino che compare solo a fine riga | Compare 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
- 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'è.
- Confronta il numero di caratteri che ti aspettavi con quello reale: una differenza è un indizio.
- 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.
- 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.