Pagine

martedì 19 maggio 2015

La tabella ASCII (parte I - il problema della codifica)

Premessa


Ragazzi, oggi parliamo della tabella ASCII. Cominciamo dalle cose semplici: la tabella ASCII fa corrispondere una combinazione di bit ad ogni carattere tipografico. L'acronimo ASCII sta per American Standard Code for Information Interchange.

Se seguite questo link alla voce di wikipedia dedicata all'ASCII, e quest'altro relativo allo standard che lo ha sostituito, l'UTF-8, trovate molte informazioni tecniche di grande importanza. Devo tuttavia ricordarvi che l'informatica è una disciplina particolare che richiede la conoscenza di una grandissima quantità di concetti come linguaggi, standard, architetture, sistemi operativi, nonché dispositivi hardware e molto altro, ragion per cui è necessario non solo operare qualche scelta che limiti il campo di interesse, ma anche organizzare il percorso di apprendimento in modo da non disperdere eccessivamente le proprie risorse intellettuali e di tempo, nel vano tentativo di approfondire ogni argomento in dettaglio.

La strategia che ogni buon informatico adotta è quella di:
  • avere un quadro concettuale (dicasi: concettuale) completo di tutte le tecnologie in gioco
  • apprendere ad un livello sufficiente una parte di esse
  • approfondire, di volta in volta, quelle che sono necessarie per svolgere un determinato compito
Poiché queste note sono indirizzate a studenti del primo anno di informatica di un istituto tecnico, i quali sono del tutto all'oscuro delle più semplici nozioni che non siano quelle di pigiare su uno smartphone, siamo obbligati a fare il primo passo muovendoci quasi esclusivamente sul piano dei concetti di base e trascurando gli approfondimenti, come ad esempio un'esposizione dettagliata delle soluzioni adottate nello standard UTF-8 rispetto all'ASCII classico.

Il problema della codifica


La parola "codifica" è uno dei termini usati dagli informatici, e in generale da chi si occupa di tecnologia e scienza, per indicare i termini di un accordo. Altre parole molto usate sono "standard" e "protocollo". In generale la parola "codifica" è usata dagli informatici e dagli elettronici per indicare un tipo di accordo relativo al funzionamento di base di un computer, ad esempio quale combinazione di bit usare per indicare un determinato colore, oppure quale livello di tensione elettrica usare per indicare un bit posto a 1 o a 0. Il termine "standard" è più frequentemente usato per indicare un accordo relativo alle architetture dei sistemi, mentre il il termine "protocollo" è quello preferito dagli ingegneri che si occupano di telecomunicazioni (protocolli di comunicazione), come pure dai medici per indicare procedure terapeutiche (protocolli di cura), dai diplomatici per indicare un cerimoniale nei rapporti tra Stati, e altro ancora.

Nel caso della tabella ASCII si parla di "codifica ASCII" perché si tratta di un accordo, ormai condiviso a livello mondiale, in base al quale si è stabilito di indicare ogni lettera dell'alfabeto, e ogni segno di punteggiatura (più qualcos'altro di cui diremo) con una ben precisa combinazione di bit. Ad esempio, in ASCII la parola "ciao" è indicata con la seguente combinazione di 32 bit, 8 per ogni carattere:

01100011 01101001 01100001 01101111
      c                i               a               o

In realtà, all'inizio la tabella ASCII usava 7 bit per ogni carattere, ma in seguito si è passati ad 8, ed oggi se ne usano 16 o 32. Ma di ciò parleremo più avanti. Prima è necessario parlare in generale del concetto di "codifica" (o standard, o protocollo, o termini simili).

Adottare una codifica significa stabilire un accordo sul significato di un segnale. Ciò presuppone l'esistenza di almeno due soggetti dotati di capacità intellettive: dalle più semplici, possedute anche dagli animali, a quelle più evolute che caratterizzano l'uomo. Un gesto, o un suono, sono esempi di segnali elementari. Quando il significato di un gesto, o di un suono, è condiviso da almeno due soggetti dotati di intelletto, allora siamo di fronte a un "codice", o "codifica". Possiamo dunque affermare che l'esistenza di un codice è indice della presenza di una qualche capacità intellettiva, cioè di coscienza.

Tuttavia c'è un problema: la distanza spazio-temporale. Se io voglio che l'informazione (il significato) associato a un gesto o a un suono duri nel tempo, oppure possa essere trasferita a distanza, devo ricorrere a un espediente: associare quel gesto o quel suono a un simbolo. Devo, cioè, imparare a scrivere. Per far ciò ho bisogno di un alfabeto, ovvero di un certo numero di simboli che rappresentino i segnali affinché, invece di trasferire questi nello spazio-tempo, cosa impossibile, io possa trasferire i simboli.

L'umanità ha adottato, nel corso della storia, due soluzioni diverse. La prima, più semplice da concepire ma meno efficiente, consiste nell'associare a ogni concetto un simbolo. Questa soluzione è più semplice perché, in un certo senso, "salta il segnale", codificando direttamente il messaggio con l'uso di uno o più simboli. Ad esempio: ho paura, dunque emetto un grido, ma, invece di "codificare il grido" (cioè il segnale), codifico direttamente l'idea di paura, con un disegno o un segno stilizzato. La soluzione alternativa, codificare il segnale che, a sua volta, "codifica" il concetto, sebbene apparentemente più complessa, alla fine è talmente più efficiente da risultare la più semplice.

Usando il primo metodo, si potrebbe usare un mucchietto di sassi, opportunamente disposti secondo le regole dell'alfabeto condiviso dalla tribù, per indicare una situazione di pericolo piuttosto che la presenza di un sentiero. Le più antiche forme di scrittura si sono conformate a questa impostazione, utilizzando disegni tracciati su una superficie (scrittura pittografica). Con il passare del tempo i disegni divennero segni stilizzati, che avevano il vantaggio di rendere meno equivocabile il loro significato.

A destra è riportato un esempio di simboli (ideogrammi) usati nell'alfabeto cinese e il metodo seguito per comporli al fine di esprimere concetti più complessi a partire da quelli più semplici. Nella seconda riga, ad esempio, con un simbolo, due simboli o tre si indica rispettivamente un albero, un bosco o una foresta. Gli ideogrammi riportati dal dizionario della lingua cinese moderna sono in totale 56000, sebbene sia sufficiente la conoscenza di circa 3500 segni per comprendere mediamente il 90% di un testo. Molte civiltà, oltre quella cinese, hanno adottato un metodo di scrittura ideografico. Si pensi, ad esempio, alle civiltà della valle dell'Indo.

La scrittura degli antichi egizi è un'evoluzione del metodo ideografico. Accanto ai segni ideografici, infatti, gli antichi egizi ne introdussero altri che indicavano suoni semplici (fonemi) e suoni composti (sillabe). I geroglifici egizi (dal greco ἱερογλυφικός - hieroglyphikós - che significa "segno sacro inciso") utilizzavano 24 segni di base i quali, combinati in modo diverso secondo regole anche complesse, conducevano a un totale di quasi 7000 segni diversi. Per approfondire potete visionare questo lavoro, svolto dai ragazzi della IV-D dell'Istituto Commerciale Santorre di Santarosa di Savigliano (Cuneo).

Il secondo metodo che gli uomini hanno sviluppato per scrivere consiste nell'associare un simbolo ad ogni suono elementare presente in una lingua. Questo è il metodo fonetico, lo stesso che avete appreso in prima elementare: in questo caso si codifica il segnale sonoro (la parola) che è associato al concetto che si intende trasferire nello spazio-tempo. La complessità, apparentemente, aumenta, perché si ha bisogno di una doppia codifica (concetto => suono => simbolo) ma alla fine l'efficienza è molto maggiore.

Si ritiene che il metodo fonetico si sia sviluppato, a partire dalla metà del secondo millennio a.c., come evoluzione dei geroglifici usati dagli egiziani e dagli abitanti della Mesopotamia (coincidente in gran parte con l'odierno Iraq).

Poiché presumo che le maestre e i maestri che vi hanno insegnato a leggere e scrivere abbiano fatto un buon lavoro, non perderò tempo per spiegarvi come funziona il metodo di scrittura fonetica. Tuttavia vi è un aspetto del metodo fonetico che è molto interessante, perché ha attinenza con la tabella ASCII; per essere più precisi con l'evoluzione di questa codifica da 7/8 bit per carattere fino ai 16/32 oggi utilizzati nella codifica UTF-8. 

L'alfabeto fonetico internazionale (IPA)


Vedete ragazzi, quando voi eravate alle elementari le maestre e i maestri vi hanno insegnato, per prima cosa, i simboli fonetici che rappresentano i suoni elementari della lingua italiana. I suoni elementari sono chiamati "fonemi", mentre i simboli usati per rappresentarli sono i "grafemi".

Vi è però un problema. Prendiamo il fonema rappresentato dal grafema "c", presente ad esempio nella parola "cane". Lo stesso fonema (suono) è presente però anche nella parola "chiesa", ma in questo caso è rappresentato da una coppia di grafemi, la "c" seguita dalla "h". A complicare le cose c'è il fatto che le lingue si evolvono, per cui oggi in italiano si usa anche il grafema "k" per indicare parole ormai accolte nel dizionario italiano, ad esempio "killer", che certamente nessuno di voi si sogna di scrivere "chiller"; anche perché un "chiller" è un tipo di frigorifero.

I linguisti, cioè coloro che studiano professionalmente i linguaggi scritti e parlati da tutte le civiltà di tutti i tempi, a un certo punto hanno sentito l'esigenza di un metodo universale, ovvero non legato a una lingua particolare, per denotare tutti i suoni presenti in tutte le lingue di tutti i tempi. Da questa esigenza è nato l'alfabeto fonetico internazionale (International Phonetic Alphabet - IPA), che è un sistema convenzionale di notazione standardizzata di carattere universale, poiché consente la codifica articolatoria dei suoni di tutte le lingue del mondo.

Avete sicuramente incontrato esempi di scrittura fonetica IPA, sfogliando un dizionario. Ad esempio, la pronuncia della parola "summertime" (estate) in IPA si scrive così:  /ˈsʌm.ə.taɪm/. Il suo suono è questo

Se avete la curiosità di approfondire l'IPA vi suggerisco, per incominciare, questi due video YT: