Codifica elettronica dei testi letterari ed e-book:
la marcatura XML TEI ed il trattamento informatico del romanzo Baltico di Matteo Collura
vedi: Tavola 1 [Tavola dei caratteri ASCII].
Se come detto il più piccolo elemento atomico del DNA dell'informazione è il bit, potremmo considerare il carattere l'unità atomica dell'informazione.
Il grado più basso della codifica informatica dei testi è quindi la codifica dei caratteri.
Come abbiamo visto i computer sono in grado soltanto di trattare numeri in formato binario, affinché l'elaboratore sia in grado di operare con lettere o altri segni è necessario creare delle tabelle per la conversione dei numeri (bit) in caratteri (lettere, numeri, etc.), semplificando al massimo, possiamo dire che con queste tavole si assegna ad ogni carattere un numero.
Si suole parlare di character repertoire per l'insieme dei simboli che si vuol rappresentare, di code set per i codici numerici che fanno riferimento ai simboli del caracter repertoire, l'insieme risultante di character repertoire e code set è detto coded character set o charset; abitualmente i charset vengono rappresentati sotto forma di tabelle contenenti i simboli ed i rispettivi codici numerici, per questo motivo si suole parlare di tavole dei caratteri o code table.
Un piccolo esempio potrà aiutare a comprendere meglio quanto appena detto.
Allorché digitiamo sulla tastiera un tasto, per esempio la A maiuscola, mandiamo al computer un impulso elettrico, dei bit rappresentanti un numero binario, per la precisione nel caso della A maiuscola 1000001, il computer va a verificare nella propria tavola caratteri che il numero binario ricevuto corrisponde alla posizione 65 che a sua volta corrisponde al simbolo A, allora l'elaboratore preleva dal proprio repertorio di simboli grafici, "font", il glifo, ossia l'immagine del simbolo scelto, e lo manda a video. Lo stesso procedimento di corrispondenze fra numeri e simboli avviene allorquando apriamo un file contenente testo, tutti i codici numerici dei caratteri del file vengono tradotti nelle rispettive immagini grafiche e mandati in output.
È opportuna una precisazione, i caratteri contenuti nei charset non sono solo caratteri grafici, ma poiché un computer deve gestire non solo i cosiddetti caratteri "stampabili", ossia tutti quelli associati ad un simbolo grafico, ma anche istruzioni per la visualizzazione e le operazioni sui files, un carattere può anche, per esempio, rappresentare il comando di "a capo", il comando d'emissione di un segnale sonoro , o il segnale di inizio o di fine di un file; tali caratteri per lo più vengono usati nella trasmissione dati tra computers, o tra computer e stampante, e prendono il nome di caratteri di controllo; in genere ai caratteri di controllo vengono assegnate le prime 32 posizioni delle tavole dei caratteri.
Come detto, tutti i computer memorizzano il testo sotto forma di numeri. È tuttavia possibile che sistemi diversi memorizzino lo stesso testo utilizzando formati numerici differenti, e quindi possibile che il valore numerico che corrisponde ad un determinato carattere in un sistema , corrisponda a tutt'altro carattere in un altro; ad esempio in un computer che esegue Microsoft Windows utilizzando la tabella codici predefinita 1252 e in un computer Apple Macintosh che utilizza la tabella codici Macintosh Roman, la posizione 232 di queste tabelle dei caratteri corrisponde rispettivamente alla lettera è nel sistema Windows ed alla lettera Ë in quello Macintosh[8]. Quindi transitando da un sistema all'altro un documento contenente testo vedrebbe sostituite tutte le è con Ë.
Agli albori dell'era informatica il problema dell'incomunicabilità fra sistemi era assai diffuso. Ogni apparato informatico usava la propria tavola dei caratteri, spesso totalmente incompatibile con quella degli altri sistemi; si è parlato perciò di "babele informatica". Per cercare di ovviare a tutto questo, a partire dal 1963, un gruppo di studiosi tra cui Robert W. Bemer (considerato il padre dell'ASCII), si impegnarono nello sviluppo di un sistema di codifica standard per l'interoperabilità e l'interscambio di informazioni tra computers. Il lavoro di sviluppo culminò nel 1968 con l'approvazione da parte dell'ente nazionale americano per la standardizzazione (ANSI), che registrò come standard nazionale la tavola che prese il nome di American standard code for information interchange, meglio conosciuta come ASCII. (vedi tavola 1)
La tavola ASCII fa uso di sette bit per determinare i caratteri, cosicché sono solo 128 le posizioni possibili nella stessa (trattandosi ovviamente di tutte le combinazioni possibili di 0 e 1: 27 = 128).
Nel set ASCII, i primi 32 codici sono assegnati a caratteri di controllo, i restanti 96 codici sono assegnati ai segni d'interpunzione ed altri simboli, alle cifre da 0 a 9 e alle lettere dell'alfabeto latino, maiuscole e minuscole; mancano totalmente le lettere accentate di cui la lingua inglese non fa uso.
Nonostante tutto ciò, fu grande il successo di questa tavola, tanto che tutt'oggi è usata soprattutto per quanto riguarda le comunicazioni telematiche e la posta elettronica, e resta tuttora, praticamente, la sola universalmente condivisa da tutte le macchine.
Nel 1991 l'ISO[9] ha registrato, rendendola standard internazionale, la tavola ASCII col nome di ISO 646-IRV (International Reference Version).
Ben presto ci si rese conto, soprattutto da parte dei paesi non anglofoni, dell'inadeguatezza del charset ASCII per i testi scritti nella propria lingua madre. Si usavano vari espedienti per rappresentare le lettere accentate ed i vari simboli diacritici delle scritture occidentali, finché non si pensò di portare da 7 a 8 i bit della tavola ASCII, così il numero di caratteri disponibile divenne 256 (28 = 256), si ebbe in tal modo il cosiddetto ASCII esteso, che nelle varie versioni internazionali ospitava tutti quei caratteri non presenti nell'ASCII a 7 bit.
A partire dagli anni ottanta, soprattutto per opera della European Computer Manufacturer's Association (ECMA), sono stati rilasciati numerosi charset a 8 bit affinché fossero usati come standard per determinati gruppi di lingue, i quali furono successivamente recepiti dalla ISO e rilasciati come standard internazionali col nome di ISO 8859.
Particolarmente diffuso è il code set ISO 8859-1, meglio conosciuto come ISO Latin 1, dal nome della precedente tavola ECMA . Esso contiene i caratteri principali delle lingue occidentali e anglosassoni con alfabeti latini, ed è usato da molte applicazioni Internet, e da molti sistemi operativi. La dicitura "-1" sta ad indicare che si tratta della prima di una serie di tavole, ad esempio la ISO 8859-2 è invece usata per le scritture latine del centro e dell'est europeo; la più recente è la ISO 8859-15, la quale è uguale alla ISO 8859-1 con in più l'aggiunta del simbolo dell'euro .
Queste tavole sono costruite tutte in modo che per la prima metà garantiscono l'interoperabilità fra computers, così i primi 128 caratteri sono esattamente quelli di Iso 646 Irv; la seconda metà cerca di soddisfare, con altri 96 caratteri stampabili, le necessità di specifiche lingue o gruppi di lingue.
Se le tavole ISO 8859 hanno rappresentato un importante passo avanti per quanto riguarda l'interscambio di comunicazioni soprattutto all'interno di uno stesso gruppo linguistico, tuttavia continuano a persistere problemi nella visualizzazione di testi rappresentati con differenti tavole dei caratteri. Per cercare di risolvere il problema della "Babele informatica", a partire dagli inizi degli anni ottanta, sono sorti due progetti con l'obiettivo di creare una tavola di codifica dei caratteri universale.
Uno è stato il progetto ISO 10646, l'altro il progetto Unicode[10], portato avanti da un consorzio di aziende produttrici di software. A partire dal 1991 le due organizzazioni, comprendendo l'inopportunità dell'esistenza di due progetti distinti per una tavola universale dei caratteri, hanno unito i loro sforzi ed hanno lavorato insieme per creare un'unica tavola dei caratteri. Entrambi i progetti esistono ancora e pubblicano i loro rispettivi Standard indipendentemente, comunque il consorzio Unicode e la ISO si sono accordati per tenere le tavole dei codici UCS[11] ed ISO 10646 standard e compatibili, inoltre si sono impegnati per coordinare ogni futura estensione.
Unicode 1.1 corrisponde ad ISO 10646-1:1993, Unicode 3.0 corrisponde ad ISO 10646-1:2000, e Unicode 3.2 corrisponde ad ISO 10646-2:2001.
Tutte le versioni di Unicode a partire dalla due, e quindi anche le rispettive tavole ISO 10646, sono compatibili, solo i nuovi caratteri vengono aggiunti, i caratteri esistenti non vengono rimossi o rinominati.
È da notare che le prime 256 posizioni dell'Unicode sono uguali a quelle della tavola Iso 8859-1 questo agevola la migrazione verso il nuovo sistema.
In origine nel progetto Unicode per aggirare i limiti delle tavole ad 8 bit si era pensato di creare una nuova tavola da 16 bit che avrebbe permesso ben 65.536 combinazioni, numero più che sufficiente per rappresentare tutti i caratteri delle lingue occidentali antiche e moderne, tuttavia non abbastanza capiente per accogliere, ad esempio, gli 80.000 simboli ideografici Han oppure le 11.000 sillabe coreane Hangul.
Oggi lo standard ISO10646/Unicode si basa su una codifica a 32 bit (in realtà per motivi tecnici sono solo 31 i bit utilizzati per definire le combinazioni) che consente oltre due miliardi di possibili caratteri, numero che dovrebbe essere decisamente sufficiente per realizzare una tavola di codifica dei caratteri veramente universale.
La versione 3.2 di Unicode definisce ben 95.221 caratteri comprendenti tutte le principali lingue occidentali con alfabeto latino, quelle slave ad alfabeto cirillico, l'ebraico, l'arabo nonché buona parte delle scritture africane, asiatiche ed indiane, tra le scritture comprese in Unicode vi sono anche il greco classico, oltre ovviamente quello moderno, ed il copto.
L'implementazione informatica di Unicode tuttavia comporta dei problemi, in particolar modo per quanto riguarda la crescita della dimensione dei files, per tal motivo sono stati creati dei charset detti UTF, Universal Character Set Transformation Format.
UTF usa una tecnica di bit-shifting (spostamento dei bit) per codificare i caratteri Unicode. In sostanza l'UTF usa 7 bit per carattere per codificare i primi 127 caratteri corrispondenti all'ASCII standard, e attiva l'ottavo bit solo quando serve la codifica Unicode. Ogni carattere Unicode viene quindi codificato con un numero variabile di byte[12] che va da 1 a 3. Il vantaggio è che il testo è visualizzabile con un normale editor di testi, anche se naturalmente i caratteri diversi dall'ASCII standard potrebbero apparire non correttamente. Per i testi comuni utilizzati in occidente consente di mantenere più compatte le dimensioni dei files rispetto ad UCS in quanto la maggior parte dei caratteri sono ASCII. Inoltre, l'UTF-8 attraversa indenne, come se fosse un normale testo, anche i sistemi e i programmi che non supportano Unicode. Per questi motivi l'UTF è molto usato nella posta Internet ed in alcuni sistemi operativi[13].
Tra le codifiche UTF la più comune è la UTF-8, che tra l'altro è la codifica di default di XML.