Continuiamo il nostro viaggio allinterno del calcolatore,
esaminando il modo in cui vengono codificati i caratteri.
Normalmente i caratteri sono rappresentati come stringhe di 7 bit
mediante una codifica chiamata ASCII (acronimo di American
Standard Code for Information Interchange).
Sulle macchine moderne, ciascuno dei 128 caratteri ASCII è dato
dai 7 bit meno significativi di un ottetto.
Gli ottetti sono riuniti in parole (word) di memoria, la cui dimensione
dipende dallarchitettura usata; ad es. con word da 32 bit
una stringa di 6 caratteri occupa solamente 2 parole di memoria.
Per visualizzare la mappa dei caratteri ASCII, provate a scrivere
al prompt di Linux il comando:
man 7 ascii
Osserviamo che abbiamo utilizzato il termine ottetto,
che è formalmente corretto ma raramente utilizzato: la maggior parte
delle persone si riferisce a un ottetto come ad un byte e ritiene
che i byte siano lunghi 8 bit.
Per essere corretti, il termine byte è più generale;
ad es. in passato ci sono state macchine a 36 bit con byte di 9
bit, anche se probabilmente ciò non capiterà più in futuro.
Purtroppo non tutto il mondo usa i codici ASCII, a causa del fatto
che non contiene molti caratteri accentati e alcuni caratteri speciali
necessari per molte lingue.
Diversi sono stati i tentativi di risolvere questo problema.
Attualmente tutti fanno uso dell'ottavo bit non usato dai codici
ASCII (il più significativo), cosicché lintero set di caratteri
rappresentabili è esteso a 256, di cui la prima metà (da 0 a 127)
è costituita dai codici ASCII originari.
Quello più largamente utilizzato è il set di caratteri Latin-1
(o più formalmente ISO 8859-1), che è il set di caratteri predefinito
per Linux, HTML e X.
Per visualizzare la mappa dei caratteri Latin-1, potete riferirvi
alla corrispondente pagina del manuale Linux scrivendo al prompt
il comando:
man 7 iso_8859_1
Microsoft Windows usa una versione mutante di Latin-1, che aggiunge
alcuni caratteri come le virgolette destre e sinistre, in posizioni
lasciate libere da Latin-1 per ragioni storiche (per una resoconto
severo dei problemi che ciò ha provocato, vedere la pagina cliccando
qui).
Latin-1 gestisce le principali lingue europee, tra cui inglese,
francese, tedesco, spagnolo, italiano, olandese, norvegese, svedese
e danese.
Tuttavia non è ancora sufficiente, per cui esistono altre serie
di set di caratteri da Latin-2 a Latin-9, per rappresentare il greco,
l'arabo, l'ebraico e il serbo-croato (chi è interessato può trovare
maggiori dettagli alla pagina
ISO alphabet soup ).
La soluzione definitiva è uno standard (enorme) a 16 bit chiamato
Unicode, che è identico a Latin-1 nelle 256 posizioni più
basse, mentre nello spazio successivo comprende caratteri per le
lingue greco, cirillico, armeno, ebraico, arabo, devanagarico, bengalese,
gurmukhi, gujarati, oriya, tamil, telugu, kannada, malese, tailandese,
lao, georgiano, tibetano, giapponese kana e il set completo del
coreano hangul moderno e un set unificato di ideogrammi cinesi/giapponesi/coreani
(CJK).
Per maggiori dettagli vedere la Unicode
Home Page .
Detto questo dobbiamo cominciare a vedere come ci possano essere
utili tutte queste informazioni in un programma C.
Sappiamo che il nostro calcolatore memorizza i dati al suo interno
mediante opportune sequenze di bit, ma noi vogliamo poter lavorare
con i dati senza dover conoscere la numerazione binaria e la corrispondenza
tra i codici binari e il loro significato.
Ad es. vogliamo vedere a video il carattere A piuttosto
che la sua codifica ASCII (01000001), in quanto questultima
ci risulta piuttosto difficile e sicuramente non immediata.
Fortunatamente il C non ci costringe a sforzi mnemonici inutili
e ci aiuta a lavorare in maniera più semplice, fornendoci degli
strumenti opportuni.
A partire dalla prossima lezione vedremo in che modo il C tratta
i nostri dati.
Torna all'indice Generale del corso di Corso di C con Linux di Software Planet