Storia della Crittografia - Codici e telecomunicazioni
Il Codice ASCII
Il cifrario di Vernam - La cifra di Feistel - Il Baudot
Codice ASCII a 7 bit
NumeroBinarioLetteraNumeroBinarioLetteraNumeroBinarioLettera
caratteri di controllo
000000000NULL100000001200000010
300000011400000100500000101
600000110700000111800001000BS
900001001HT1000001010LF1100001011VT
1200001100FF1300001101CR1400001110
150000111116000100001700010001
180001001019000100112000010100
210001010122000101102300010111
240001100025000110012600011010
2700011011ESC28000111002900011101
30000111103100011111
caratteri alfabetici
3200100000 3300100001!3400100010"
3500100011#3600100100$3700100101%
3800100110&3900100111'4000101000(
4100101001)4200101010*4300101011+
4400101100,4500101101-4600101110.
4700101111/4800110000049001100011
500011001025100110011352001101004
530011010155400110110655001101117
56001110008570011100195800111010:
5900111011;6000111100<6100111101=
6200111110>6300111111?6401000000@
6501000001A6601000010B6701000011C
6801000100D6901000101E7001000110F
7101000111G7201001000H7301001001I
7401001010J7501001011K7601001100L
7701001101M7801001110N7901001111O
8001010000P8101010001Q8201010010R
8301010011S8401010100T8501010101U
8601010110V8701010111W8801011000X
8901011001Y9001011010Z9101011011[
9201011100\9301011101]9401011110^
9501011111_9601100000`9701100001a
9801100010b9901100011c10001100100d
10101100101e10201100110f10301100111g
10401101000h10501101001i10601101010j
10701101011k10801101100l10901101101m
11001101110n11101101111o11201110000p
11301110001q11401110010r11501110011s
11601110100t11701110101u11801110110v
11901110111w12001111000x12101111001y
12201111010z12301111011{12401111100|
12501111101}12601111110~12701111111

Il codice ASCII è oggi il più usato dai computer per rappresentare i caratteri alfanumerici con numeri binari.

L'acronimo ASCII sta per American Standard Code for Information Interchange; questo codice fu progettato dopo il 1960 in ambiente IBM e quindi inserito nello standard ASA (American Standard Association) e in seguito nell'ANSI (American National Standards Institute).

Il codice doveva includere tutti i caratteri già presenti negli standard per le telecomunicazioni e cioè lo spazio, le 26 lettere (maiuscole) dell'alfabeto, le 10 cifre decimali, i segni di interpunzione oltre a un certo numero di simboli di uso comune. Un totale di 40-50 simboli che diventano più di 64 se si vogliono includere anche le lettere minuscole; poiché 64 = 26 richiede 6 bit, occorrevano almeno 7 bit.

E il codice ASCII nacque appunto come codice a 7 bit, due più del vecchio codice Baudot. Usando la notazione binaria ogni simbolo è rappresentato da un numero a 7 cifre, da 0000000 a 1111111, in decimale da 0 a 127, 128 caratteri in tutto.

In trasmissione in realtà vengono trasmessi ottetti di bit, detti byte, avanza quindi un ottavo bit che è usato come bit di controllo trasmissione.

I primi 32 caratteri da 0 a 31 sono caratteri di controllo, per esempio CR carriage return= ritorno carrello, numero 13, 0001101 in binario, LF Line Feed, prossima linea.

Il carattere 32 è lo spazio, i caratteri da 33 a 47 sono simboli vari, i caratteri da 48 a 57 rappresentano le 10 cifre decimali da 0 a 9, i caratteri da 58 a 64 sono altri simboli vari.

Le lettere latine maiuscole vanno dal codice ASCII 65 ('A') al 90 ('Z'); quelle minuscole da ASCII 97('a') a 122 ('z'); i rimanenti sono ancora simboli speciali, parentesi e simili, come da tabella a fianco.

Nascono come funghi i codici ASCII estesi

Il codice ASCII in sostanza contiene i caratteri presenti sulla tastiera di una macchina da scrivere americana, mancano quindi del tutto i caratteri specifici di altre lingue, per esempio vocali accentate, con l'umlaut, caratteri con tilde, per non parlare di altri alfabeti come il greco, il cirillico ecc.ecc.

Questa limitazione suggerì ben presto di estendere ASCII con altri caratteri; nacquero codici ASCII estesi a 8 bit, sacrificando il bit di controllo; in questo modo fu possibile inserire vocali accentate, simboli grafici ecc.ecc. Purtroppo nessuno standard fu imposto a queste estensioni e ne nacquero molte diverse tra loro, una MSDOS, una Windows, una Unix ... in poche parole una Babele di estensioni.

Attualmente le estensioni più diffuse del codice ASCII sono ISO-8859-1, ISO-8859-15, Windows 1252.

La conseguenza di questa Babele la si vede ancora oggi navigando sul Web, capita spesso di trovarsi davanti a pagine con caratteri incomprensibili o sostituiti da punti di domanda. Sono caratteri appartenenti a uno dei tanti ASCII estesi, male interpretati da un browser configurato per un'altra estesione.

Emerge il chiaro vincitore: UTF-8

Dopo anni di confusione sta però finalmente emergendo il chiaro vincitore tra tutte queste estensioni, il codice UTF-8 che estende in modo molto intelligente l'originale ASCII a 7 bit, in modo da poter includere ben più di 256 caratteri.

Il trucco in sostanza è questo: vengono trasmessi come sempre ottetti (byte) di bit; se il bit di controllo è 0, l'ottetto va interpretato come carattere ASCII a 7 bit; se il bit di controllo è 1, va letto il prossimo ottetto che sarà l'ultimo se il bit di controllo è 0, altrimenti si deve leggere anche il successivo e così via. In questo modo diventa possibile codificare un numero pressochè infinito di caratteri; e infatti UTF-8 contiene ormai quasi tutti gli alfabeti del mondo presenti e passati, e anche futuri perché il codice può essere ulteriormente esteso.