# File di testo

Un file di testo è un file per computer che contiene solamente testo puro, ossia la codifica binaria di caratteri comprensibili a un lettore umano, come lettere, numeri, segni di punteggiatura, ecc.
Il termine può essere usato in contrapposizione a file binario, che è invece un file contenente sequenze binarie non riconducibili a una codifica di caratteri leggibili, come ad esempio rappresentazioni binarie di pixel o delle istruzioni di una applicazione eseguibili dalla CPU. In realtà, dal punto di vista delle macchine, non c'è distinzione tra i due tipi, poiché tutti i file non sono altro che sequenze di byte. La differenza sta solo in ciò che i byte rappresentano e come sono utilizzati. È il formato del file che indica come vanno interpretate le sequenze di byte che lo formano.
I byte dei file di testo rappresentano quindi ognuno lettere, numeri, punteggiatura, spazi e altri normali simboli stampabili, ma possono contenere anche alcuni caratteri di controllo come tabulatore, inizio riga e ritorno a capo.

## Codifica

Per codifica nei file di testo si intende la corrispondenza tra il valore dei byte, che è sempre un numero intero da 0 a 255, e il carattere rappresentato. La corrispondenza non è sempre 1 a 1: in molte codifiche moderne un solo carattere è rappresentato da molti byte, in modo da superare il limite di 256 possibili caratteri e supportare anche lingue ricche di simboli come quelle orientali. Esempi di codifiche 1 a 1 sono la comunissima ASCII, quelle dello standard ISO 8859 e la EBCDIC. Esempi di codifiche multibyte sono i vari tipi di Unicode e l'EUC.

## Utilizzo

Ovviamente lo scopo per cui sono nati i file di testo, e tuttora un utilizzo molto frequente, è la lettura/scrittura diretta da parte degli utenti. La mancanza di formattazione li rende poveri dal punto di vista estetico, ma in compenso grazie a questa semplicità non occorrono particolari programmi per leggerli, e spesso possono essere trasferiti direttamente da un sistema operativo all'altro (a condizione di avere lo stesso charset a disposizione).
Per questo quasi tutti i software sono accompagnati da un file di testo semplice che ne dà una breve descrizione, spesso chiamato leggimi (o readme in inglese).
Anche il codice sorgente dei programmi di solito è scritto in puro testo. Se un sorgente fosse scritto ad esempio in formato .doc (con Microsoft Word o LibreOffice Writer), il file prodotto conterrebbe anche informazioni binarie di formato che metterebbero in crisi i compilatori.
Ci sono alcune limitazioni all'universalità dei file di testo:
* la codifica non è sempre ovvia, e quando il sistema non la riconosce o non la supporta, il file può diventare illeggibile;
* i maggiori sistemi usano notazioni diverse per il carattere di avanzamento di linea e/o di ritorno a capo: macOS (fino alla versione 9) usa CR; UNIX (GNU, BSD, Oracle Solaris, Mac OS X ecc...) usa LF, mentre DOS e Windows utilizzano entrambi (CR/LF). Alcuni programmi (come Gedit) sono in grado di aprire correttamente i file di testo (perlomeno con le codifiche più diffuse) indipendentemente dal sistema in cui sono stati creati; in altri casi la visualizzazione sarà imperfetta.
L'estensione dei file di testo destinati solo alla lettura a scopo informativo dell'utente, quando utilizzata, è generalmente .txt.
Nel caso di file sorgente l'estensione dipende dal linguaggio di programmazione utilizzato, ad esempio .c per il C e .htm o .html per l'HTML.

### Utilizzo da parte del software

I file di testo non sono necessariamente legati all'elaborazione umana. Molto spesso sono utilizzati puramente dal software, sia in lettura che in scrittura, per l'immagazzinamento dei dati. Sono meno compatti dei file binari, il che può significare uno spreco di spazio su disco: ad esempio un numero a 32 bit, che può valere miliardi, occupa sempre 4 byte in binario, ma in formato testo ne occupa fino a 11 (come nel caso di -1222333444) più eventuali caratteri di delimitazione. Tuttavia, se l'occupazione del disco non è critica, il formato testo presenta dei vantaggi:
* I dati possono essere utilizzati facilmente da altri programmi e sistemi, con una conoscenza minima della loro struttura: si è meno vincolati alla dimensione dei campi e all'ordine dei byte. Ad esempio, sebbene ogni foglio elettronico abbia un suo formato di memorizzazione binaria, tutti possono lavorare con file di testo dove la matrice di dati è semplicemente un elenco di valori separati da caratteri standard (CSV, TSV...)
* L'eventuale corruzione dei dati causa in genere meno danni e solo localmente. Perdere un byte in un file di testo di solito vuol dire perdere un dato; perderlo in un file binario può voler dire sfasare e rovinare l'intero file
* All'occorrenza o in caso di errori (debugging) può essere facilmente controllato da un utente. Ad esempio esaminare e modificare un file INI è molto intuitivo