ASCII - American Standard Code for Information Interchange

Chi si occupa ormai da tempo dell’EDP (Electronic Data Processing o Elaborazione automatica dei dati) e di Internet si è certamente già imbattuto in questo acronimo: ASCII. Ma per che cosa sta questa abbreviazione? Il concetto descrive una codifica di caratteri definita. Infatti essa regola tutti i caratteri di un codice specifico: sia quelli stampabili come lettere, cifre e segni di interpunzione, così come i caratteri di comando non stampabili. Il codice ASCII si utilizza per stabilire appunto la rappresentazione dei caratteri per mezzo dei dispositivi elettronici, come ad esempio PC e smartphone. Questa è una componente importante di molti lavori di programmazione. Ma anche per il semplice utente è consigliabile farsi un’idea di come funziona il codice ASCII. Per semplificarvi l’apprendimento, vi forniamo una pratica tabella del codice ASCII, con la quale potete consultare ogni carattere.

Definizione ASCII

La codifica di caratteri corrisponde all’American Standard Code for Information Interchange e quindi al suo predecessore statunitense ISO 646 (specifica di un codice di caratteri internazionale). ASCII è un codice a 7 bit capace di definire 128 caratteri (27). La codifica si compone di 33 caratteri non stampabili e 95 stampabili, e comprende perciò lettere, segni di interpunzione, cifre e anche codici di comando.

Breve storia del codice ASCII

La American Standards Association (ASA), anche conosciuta come American National Standards Institute (ANSI), ha approvato l’American Standard Code for Information Interchange (ASCII) già nel 1963, fornendo così le disposizioni necessarie per la mappatura dei i caratteri da parte dei dispostivi elettronici. Trattandosi di uno standard puramente statunitense, si parla spesso anche di US-ASCII, il cui predecessore può essere considerato, tra gli altri, il codice morse, o le codifiche utilizzate per il telegrafo: un codice standardizzato (come ad esempio la successione di segnali acustici) viene tradotto sotto forma di testo. Il codice ASCII è stato perciò introdotto poiché i computer utilizzano il codice binario per i propri processi interni, non potendo funzionare con il nostro alfabeto.

Fino a oggi solo raramente sono state apportate modifiche allo standard dei caratteri, ovvero quando è stato necessario adattarlo a nuove sfide. Esistono ad esempio delle estensioni che utilizzano anche un ottavo bit, così da essere in grado di rappresentare anche singolarità nazionali, come ad esempio gli accenti. La versione più popolare in Italia è quella dell’Europa occidentale, chiamata “alfabeti latini no. 1” (ISO 88591-1), basata sul codice ASCII. Un passaggio dall’alfabeto latino ai caratteri di scrittura arabi va tuttavia escluso. Perciò nel frattempo sono state abbondantemente utilizzate le codifiche di caratteri basati su Unicode come l’UTF-8: Unicode offre spazio per più di un milione di caratteri diversi. UTF-8 è inoltre compatibile con ASCII, infatti i due codificano alla stessa maniera i primi 128 caratteri.

Che cos’è ASCII?

ASCII è uno standard per la rappresentazione di caratteri su dispositivi elettronici. Per capire che cosa significhi deve essere chiaro come funziona a grandi linee un computer: in un computer i processi di calcolo si basano sempre sul sistema binario: gli 1 (uno) e gli 0 (zero) determinano i processi di un computer. Dunque anche ASCII è improntato su questo sistema. Lo standard ASCII originario definisce diversi caratteri attraverso 7 bit, corrispondenti a 7 spazi consecutivi, contenenti ciascuno un 1 o uno 0. L’ottavo bit (8 bit = 1 byte), viene solitamente utilizzato a fini di verifica. Le estensioni, sempre basate su ASCII, utilizzano questo ottavo bit per ampliare i caratteri disponibili a 256 (28).

Così ogni carattere corrisponde a una sequenza a 7 cifre di zero e uno, che possono essere rappresentati come cifre decimali o esadecimali. I caratteri ASCI sono suddivisibili in più gruppi:

  • Caratteri di comando (0 - 31 & 127): i caratteri di comando sono caratteri non stampabili. Servono a trasmettere i comandi al PC o alla stampante e si basano su tecnologia di scrittura a distanza. Con questi caratteri vengono impostate le interruzioni di linea o i tabulatori. Molti di questi caratteri oggigiorno non sono più molto utilizzati.
  • Caratteri speciali (32 - 47 / 58 - 64 / 91 - 96 / 123 – 126): i caratteri speciali comprendono tutti quei caratteri stampabili che non sono né lettere né cifre, come ad esempio i segni di interpunzione o i segni tecnico matematici. Anche lo spazio conta come ASCII, che sebbene non visibile risulta stampabile, non rientrando quindi nella categoria dei caratteri di comando.
  • Cifre (30 – 39): le cifre comprendono le dieci cifre arabe dallo 0 al 9.
  • Lettere (65 – 90 / 97 – 122): le lettere sono suddivise in due blocchi, il primo contenente le lettere maiuscole e il secondo quelle minuscole.
Fatto

In origine l’ottavo bit doveva permettere di rilevare l’eventuale presenza di errori nei dati. Il cosiddetto “bit di parità” permette il ricevente di riconoscere l’inesattezza della sequenza. Tuttavia consente solamente di riconoscere la presenza di un errore, ma non la sua origine. Perciò il controllo di parità risulta poco adatto per la correzione degli errori.

Tabella ASCII: panoramica di tutti i codici ASCII

Di prassi i valori nelle tabelle codice ASCII vengono rappresentati in maniera decimale, binaria o esadecimale. Le prime due poiché sono sistemi numerici utilizzati da uomini e macchine. Il sistema esadecimale ha invece il vantaggio che si compone di 16 caratteri (0 – 9 + A – F) ed è quindi in grado di rappresentare numeri di più grandi dimensioni con una sequenza di caratteri più breve. Dunque è possibile rappresentare un byte con un massimo di 2 cifre.

Bin. Hex. Dec. Caratteri ASCII Spiegazione Gruppo
0000000 0 0 NUL Il codice zero invita il dispositivo a non agire. (Null character) Codici di comando
0000001 1 1 SOH Introduce un’intestazione. (Start of Heading) Codici di comando
0000010 2 2 STX Chiude l’intestazione e segna l’inizio di un messaggio. (Start of Text) Codici di comando
0000011 3 3 ETX Mostra la fine del messaggio. (End of Text) Codici di comando
0000100 4 4 EOT Segna la fine della trasmissione completa. (End of Transmission) Codici di comando
0000101 5 5 ENQ Una richiesta che prevede una risposta. (Enquiry) Codici di comando
0000110 6 6 ACK Fornisce una riposta positiva a una richiesta. (Acknowledge) Codici di comando
0000111 7 7 BEL Mette in funzione un segnale acustico. (Bell) Codici di comando
0001000 8 8 BS Fa muovere il cursore una posizione indietro. (Backspace) Codici di comando
0001001 9 9 TAB (HT) Un tabulatore orizzontale che muove il cursore alla successiva posizione predefinita all’interno di una riga. (Horizontal Tab) Codici di comando
0001010 A 10 LF Fa passare il cursore alla linea successiva. (Line Feed) Codici di comando
0001011 B 11 VT Il tabulatore verticale fa passare il cursore a una riga predefinita. (Vertical Tab) Codici di comando
0001100 C 12 FF Richiede una interruzione di pagina. (Form Feed) Codici di comando
0001101 D 13 CR Riposiziona il cursore nella prima posizione della riga. (Carriage Return) Codici di comando
0001110 E 14 SO Passa a una rappresentazione particolare. (Shift Out) Codici di comando
0001111 F 15 SI Riporta la rappresentazione al suo stato standard. (Shift In) Codici di comando
0010000 10 16 DLE Il significato dei caratteri successivi viene modificato. (Data Link Escape) Codici di comando
0010001 11 17 DC1 Caratteri di comando, che vengono assegnati in base al dispositivo utilizzato, per azionare funzioni specifiche. (Device Control) Codici di comando
0010010 12 18 DC2 Caratteri di comando, che vengono assegnati in base al dispositivo utilizzato, per azionare funzioni specifiche. (Device Control) Codici di comando
0010011 13 19 DC3 Caratteri di comando, che vengono assegnati in base al dispositivo utilizzato, per azionare funzioni specifiche. (Device Control) Codici di comando
0010100 14 20 DC4 Caratteri di comando, che vengono assegnati in base al dispositivo utilizzato, per azionare funzioni specifiche. (Device Control) Codici di comando
0010101 15 21 NAK Risposta negativa a una richiesta. (Negative Acknowledge) Codici di comando
0010110 16 22 SYN Sincronizza la trasmissione dati anche senza la trasmissione di alcun segnale. (Synchronous Idle) Codici di comando
0010111 17 23 ETB Segna la fine di un blocco di trasmissione. (End of Transmission Block) Codici di comando
0011000 18 24 CAN Stabilisce che una trasmissione è avvenuta in maniera errata e che i dati in essa contenuti devono essere scartati. (Cancel) Codici di comando
0011001 19 25 EM Mostra la fine del supporto di memoria. (End of Medium) Codici di comando
0011010 1A 26 SUB Sostituzione di un carattere sbagliato. (Substitute) Codici di comando
0011011 1B 27 ESC Introduce una sequenza Escape, fornendo ai caratteri seguenti un significato distinto. (Escape) Codici di comando
0011100 1C 28 FS Marca la divisione dei blocchi di dati logici ed è ordinato gerarchicamente: File come unità maggiore, Unit come quella minore. (File Separator, Group Separator, Record Separator, Unit Separator) Codici di comando
0011101 1D 29 GS Marca la divisione dei blocchi di dati logici ed è ordinato gerarchicamente: File come unità maggiore, Unit come quella minore. (File Separator, Group Separator, Record Separator, Unit Separator) Codici di comando
0011110 1E 30 RS Marca la divisione dei blocchi di dati logici ed è ordinato gerarchicamente: File come unità maggiore, Unit come quella minore. (File Separator, Group Separator, Record Separator, Unit Separator) Codici di comando
0011111 1F 31 US Marca la divisione dei blocchi di dati logici ed è ordinato gerarchicamente: File come unità maggiore, Unit come quella minore. (File Separator, Group Separator, Record Separator, Unit Separator) Codici di comando
0100000 20 32 SP Spazio (Space) Caratteri speciali
0100001 21 33 ! Punto esclamativo Caratteri speciali
0100010 22 34 " Doppio apice Caratteri speciali
0100011 23 35 # Cancelletto Caratteri speciali
0100100 24 36 $ Simbolo del dollaro Caratteri speciali
0100101 25 37 % Simbolo percentuale Caratteri speciali
0100110 26 38 & E commerciale Caratteri speciali
0100111 27 39 ' Apostrofo Caratteri speciali
0101000 28 40 ( Parentesi sinistra Caratteri speciali
0101001 29 41 ) Parentesi destra Caratteri speciali
0101010 2A 42 * Stellina (asterisco) Caratteri speciali
0101011 2B 43 + Simbolo più Caratteri speciali
0101100 2C 44 , Virgola Caratteri speciali
0101101 2D 45 - Trattino Caratteri speciali
0101110 2E 46 . Punto Caratteri speciali
0101111 2F 47 / Barra Caratteri speciali
0110000 30 48 0   Cifre
0110001 31 49 1   Cifre
0110010 32 50 2   Cifre
0110011 33 51 3   Cifre
0110100 34 52 4   Cifre
0110101 35 53 5   Cifre
0110110 36 54 6   Cifre
0110111 37 55 7   Cifre
0111000 38 56 8   Cifre
0111001 39 57 9   Cifre
0111010 3A 58 : Due punti Caratteri speciali
0111011 3B 59 ; Punto e virgola Caratteri speciali
0111100 3C 60 < Minore di Caratteri speciali
0111101 3D 61 = Uguale Caratteri speciali
0111110 3E 62 > Maggiore di Caratteri speciali
0111111 3F 63 ? Punto di domanda Caratteri speciali
1000000 40 64 @ Chiocciola Caratteri speciali
1000001 41 65 A   Lettere maiuscole
1000010 42 66 B   Lettere maiuscole
1000011 43 67 C   Lettere maiuscole
1000100 44 68 D   Lettere maiuscole
1000101 45 69 E   Lettere maiuscole
1000110 46 70 F   Lettere maiuscole
1000111 47 71 G   Lettere maiuscole
1001000 48 72 H   Lettere maiuscole
1001001 49 73 I   Lettere maiuscole
1001010 4A 74 J   Lettere maiuscole
1001011 4B 75 K   Lettere maiuscole
1001100 4C 76 L   Lettere maiuscole
1001101 4D 77 M   Lettere maiuscole
1001110 4E 78 N   Lettere maiuscole
1001111 4F 79 O   Lettere maiuscole
1010000 50 80 P   Lettere maiuscole
1010001 51 81 Q   Lettere maiuscole
1010010 52 82 R   Lettere maiuscole
1010011 53 83 S   Lettere maiuscole
1010100 54 84 T   Lettere maiuscole
1010101 55 85 U   Lettere maiuscole
1010110 56 86 V   Lettere maiuscole
1010111 57 87 W   Lettere maiuscole
1011000 58 88 X   Lettere maiuscole
1011001 59 89 Y   Lettere maiuscole
1011010 5A 90 Z   Lettere maiuscole
1011011 5B 91 [ Parentesi quadra sinistra Caratteri speciali
1011100 5C 92 \ Barra inversa („Backslash“) Caratteri speciali
1011101 5D 93 ] Parentesi quadra destra Caratteri speciali
1011110 5E 94 ^ Accento circonflesso Caratteri speciali
1011111 5F 95 _ Trattino basso Caratteri speciali
1100000 60 96 ` Accento grave („Backtick“) Caratteri speciali
1100001 61 97 a   Lettere minuscole
1100010 62 98 b   Lettere minuscole
1100011 63 99 c   Lettere minuscole
1100100 64 100 d   Lettere minuscole
1100101 65 101 e   Lettere minuscole
1100110 66 102 f   Lettere minuscole
1100111 67 103 g   Lettere minuscole
1101000 68 104 h   Lettere minuscole
1101001 69 105 i   Lettere minuscole
1101010 6A 106 j   Lettere minuscole
1101011 6B 107 k   Lettere minuscole
1101100 6C 108 l   Lettere minuscole
1101101 6D 109 m   Lettere minuscole
1101110 6E 110 n   Lettere minuscole
1101111 6F 111 o   Lettere minuscole
1110000 70 112 p   Lettere minuscole
1110001 71 113 q   Lettere minuscole
1110010 72 114 r   Lettere minuscole
1110011 73 115 s   Lettere minuscole
1110100 74 116 t   Lettere minuscole
1110101 75 117 u   Lettere minuscole
1110110 76 118 v   Lettere minuscole
1110111 77 119 w   Lettere minuscole
1111000 78 120 x   Lettere minuscole
1111001 79 121 y   Lettere minuscole
1111010 7A 122 z   Lettere minuscole
1111011 7B 123 { Parentesi graffa sinistra Caratteri speciali
1111100 7C 124 l Barra verticale („Pipe“) Caratteri speciali
1111101 7D 125 } Parentesi graffa destra Caratteri speciali
1111110 7E 126 ~ Tilde Caratteri speciali
1111111 7F 127 DEL Cancella un carattere. Essendo questo codice di comando composto dalla stessa cifra in tutte le posizioni, quando si utilizzava la banda perforata come supporto di registrazione, si poteva rendere nullo un altro carattere forando tutte le posizioni (la posizione forata corrispondeva a un 1). (Delete) Codici di comando

L’ottavo bit (utilizzato dalle versioni estese, altrimenti corrisponde sempre a uno zero) viene attribuito differentemente da programma a programma. Nella maggior parte dei casi la posizione aggiuntiva si utilizza per implementare singolarità specifiche di un paese. Tuttavia i primi 128 caratteri rimangono sempre nella loro forma originale.

Esempio: convertire i caratteri ASCII

Con l’ASCII il sistema converte i numeri binari in caratteri stampabili o non stampabili a seconda di un determinato standard, come elencato nella tabella qui sopra. Questo processo di calcolo può essere condotto dagli utenti anche senza strumenti di aiuto. Tutto ciò che serve è capire come calcolare i codici binari o esadecimali. In un sistema numerico ogni posizione della potenza corrisponde a un determinata base: nel sistema decimale la base è 10, nel sistema binario e in quello esadecimale la base corrisponde rispettivamente a 2 e a 16. Dopodiché si moltiplica il valore del numero con il valore della posizione.

Valore delle posizioni nel sistema decimale:

Sistema decimale

100

101

102

103

1

10

100

1000

Perciò vale:

7304 = 7 * 10³ + 3 * 10² + 0 * 10¹ + 4 * 10⁰

Analogamente funziona così anche negli altri due sistemi:

Sistema binario

20

21

22

23

1

2

4

8

Tra l’altro qui sono presenti solo due cifre:

1011 ≙1 * 2³ + 0 * 2² + 1 * 2¹ + 1 * 2⁰ = 11

Sistema esadecimale

160

161

162

163

1

16

256

4096

Mentre qui sono 16:

F1A9 ≙ 15 * 16³ + 1 * 16² + 10 * 16¹ + 9 * 16⁰ = 61865

Possedendo questa conoscenza e avendo sottomano la tabella ASCII si riescono a convertire tutte le successioni di caratteri ASCII nel sistema numerico che preferite. Qui di seguito vi riportiamo l’esempio “Digital”:

“D” corrisponde al valore decimale 68 nella tabella ASCII, quindi:

68 = 1 * 2⁶ + 1 * 2² ≙ 1000100

68 = 4 * 16¹ + 4 * 16⁰ ≙ 44

“i” corrisponde al valore decimale 105, quindi:

105 = 1 * 2⁶ + 1 * 2⁵ + 1 * 2³ + 1 * 2⁰ ≙ 1101001

105 = 6 * 16¹ + 9 * 16⁰ ≙ 69

“g” corrisponde al valore decimale 103, quindi:

103 = 1 * 2⁶ + 1 * 2⁵ + 1 * 2² + 1 * 2¹ + 1 * 2⁰ ≙ 1100111

103 = 6 * 16¹ + 7 * 16⁰ ≙ 67

“i” corrisponde di nuovo al valore decimale 105:

105 = 1 * 2⁶ + 1 * 2⁵ + 1 * 2³ + 1 * 2⁰ ≙ 1101001

105 = 6 * 16¹ + 9 * 16⁰ ≙ 69

“t” corrisponde al valore decimale 116, quindi:

116 = 1 * 2⁶ + 1 * 2⁵ + 1 * 2⁴ + 1 * 2² ≙ 1110100

116 = 7 * 16¹ + 4 * 16⁰ ≙ 74

“a” corrisponde al valore decimale 97, quindi:

97 = 1 * 2⁶ + 1 * 2⁵ + 1 * 2⁰ ≙ 1100001

97 = 6 * 16¹ + 1 * 16⁰ ≙ 61

“l” corrisponde al valore decimale 108, quindi:

108 = 1 * 2⁶ + 1* 2⁵ + 1 * 2³ + 1 * 2² ≙ 1101100

108 = 6 * 16¹ + 12 * 16⁰ ≙ 6C

Inoltre la parola scelta come esempio può essere rappresentata anche come segue:

Carattere D i g i t a l
Decimale 68 105 103 105 116 97 108
Binario 1000100 1101001 1100111 1101001 1110100 1100001 1101100
Esadecimale 44 69 67 69 74 61 6C
Consiglio

Con Windows è possibile digitare i caratteri Unicode – e quindi anche quelli ASCII – attraverso una combinazione di tasti. Tenete premuto perciò il tasto Alt e digitate il valore decimale del carattere attraverso il blocco dei numeri della tastiera.

Codice ASCII: utilizzo e campo d’appartenenza

Ancora oggi ASCII ha vari utilizzi, anche se l’UTF-8 nel frattempo ha acquisito maggiore importanza nella rappresentazione dei testi. A partire dal 2008 Unicode ha rubato il titolo di codifica più utilizzata nel World Wide Web alla vecchia codifica a caratteri. Il vantaggio dell’UTF-8 è che il codice è quasi compatibile verso il basso: ASCII è un sottoinsieme di UTF-8 e quindi i primi 128 caratteri sono identici. Essendo l’ASCII visto come il minimo comune denominatore delle maggiori nuove forme di codifica, la vecchia codifica trova ancora utilizzo nelle e-mail e negli URL.

Fatto

Gli utenti possono utilizzare naturalmente anche Unicode per la creazione di e-mail, e e persino dotare i domini di accenti grazie all’Internationalized Domain Names. In entrambi i casi prima della trasmissione il testo deve essere tuttavia convertito nel formato ASCII. Questo avviene automaticamente, così che l’utente non se ne accorga neanche.

Inoltre, ormai da tempo, la codifica ASCII viene utilizzata meno per fini tecnici quanto per scopi artistici: per arte ASCII si intende la creazione di immagini attraverso l’utilizzo di caratteri stampabili della tabella ASCII. La gamma è sufficientemente larga per scritte, figure stilizzate e anche dipinti veri e propri. Gli artisti ASCII sfruttano varie luminosità dei singoli caratteri. In questo modo è possibile realizzare anche delle ombreggiature.