La tabella ASCII (American Standard Code for Information Interchange) venne creata attorno al 1963 in America, e stabilisce una matrice (inizialmente a 7 bit - cioè ogni elemento è rappresentato da un numero binario a 7 cifre, da 0000000 a 1111111 per un totale di 128 elementi) dove a ciascun valore binario viene fatta corrispondere una lettera (maiuscola o minuscola), un numero o un simbolo con lo scopo di creare un sistema unificato per lo scambio di informazioni tra il linguaggio degli elaboratori (capaci di interpretare solo stringhe binarie) e quello degli esseri umani (sotto forma di linguaggio scritto). Le prime 32 posizioni sono occupate da caratteri non stampabili, come l'"a capo" (13 - CR - Carriage Return) o la "fine della trasmissione" (7 - EOT - End of Trasmission) o più banalmente lo "spazio" (32 - Space).
Tabella 1: tabella ASCII base
| 00000000 | 0 | NUL | | 00000001 | 1 | SOH | | 00000010 | 2 | STX | | 00000011 | 3 | ETX | | 00000100 | 4 | EOT | | 00000101 | 5 | ENQ | | 00000110 | 6 | ACK | | 00000111 | 7 | BEL | | 00001000 | 8 | BS | | 00001001 | 9 | HT | | 00001010 | 10 | LF | | 00001011 | 11 | VT | | 00001100 | 12 | FF | | 00001101 | 13 | CR | | 00001110 | 14 | SO | | 00001111 | 15 | SI | | 00010000 | 16 | DLE | | 00010001 | 17 | DC1 | | 00010010 | 18 | DC2 | | 00010011 | 19 | DC3 | | 00010100 | 20 | DC4 | | 00010101 | 21 | NAK | | 00010110 | 22 | SYN | | 00010111 | 23 | ETB | | 00011000 | 24 | CAN | | 00011001 | 25 | EM | | 00011010 | 26 | SUB | | 00011011 | 27 | ESC | | 00011100 | 28 | FS | | 00011101 | 29 | GS | | 00011110 | 30 | RS | | 00011111 | 31 | US | | | 00100000 | 32 | SPACE | | 00100001 | 33 | ! | | 00100010 | 34 | " | | 00100011 | 35 | # | | 00100100 | 36 | $ | | 00100101 | 37 | % | | 00100110 | 38 | & | | 00100111 | 39 | ' | | 00101000 | 40 | ( | | 00101001 | 41 | ) | | 00101010 | 42 | * | | 00101011 | 43 | + | | 00101100 | 44 | , | | 00101101 | 45 | - | | 00101110 | 46 | . | | 00101111 | 47 | / | | 00110000 | 48 | 0 | | 00110001 | 49 | 1 | | 00110010 | 50 | 2 | | 00110011 | 51 | 3 | | 00110100 | 52 | 4 | | 00110101 | 53 | 5 | | 00110110 | 54 | 6 | | 00110111 | 55 | 7 | | 00111000 | 56 | 8 | | 00111001 | 57 | 9 | | 00111010 | 58 | : | | 00111011 | 59 | ; | | 00111100 | 60 | < | | 00111101 | 61 | = | | 00111110 | 62 | > | | 00111111 | 63 | ? | | | 01000000 | 64 | @ | | 01000001 | 65 | A | | 01000010 | 66 | B | | 01000011 | 67 | C | | 01000100 | 68 | D | | 01000101 | 69 | E | | 01000110 | 70 | F | | 01000111 | 71 | G | | 01001000 | 72 | H | | 01001001 | 73 | I | | 01001010 | 74 | J | | 01001011 | 75 | K | | 01001100 | 76 | L | | 01001101 | 77 | M | | 01001110 | 78 | N | | 01001111 | 79 | O | | 01010000 | 80 | P | | 01010001 | 81 | Q | | 01010010 | 82 | R | | 01010011 | 83 | S | | 01010100 | 84 | T | | 01010101 | 85 | U | | 01010110 | 86 | V | | 01010111 | 87 | W | | 01011000 | 88 | X | | 01011001 | 89 | Y | | 01011010 | 90 | Z | | 01011011 | 91 | [ | | 01011100 | 92 | \ | | 01011101 | 93 | ] | | 01011110 | 94 | ^ | | 01011111 | 95 | _ | | | 01100000 | 96 | ` | | 01100001 | 97 | a | | 01100010 | 98 | b | | 01100011 | 99 | c | | 01100100 | 100 | d | | 01100101 | 101 | e | | 01100110 | 102 | f | | 01100111 | 103 | g | | 01101000 | 104 | h | | 01101001 | 105 | i | | 01101010 | 106 | j | | 01101011 | 107 | k | | 01101100 | 108 | l | | 01101101 | 109 | m | | 01101110 | 110 | n | | 01101111 | 111 | o | | 01110000 | 112 | p | | 01110001 | 113 | q | | 01110010 | 114 | r | | 01110011 | 115 | s | | 01110100 | 116 | t | | 01110101 | 117 | u | | 01110110 | 118 | v | | 01110111 | 119 | w | | 01111000 | 120 | x | | 01111001 | 121 | y | | 01111010 | 122 | z | | 01111011 | 123 | { | | 01111100 | 124 | | | | 01111101 | 125 | } | | 01111110 | 126 | ~ | | 01111111 | 127 | DEL | |
Ovviamente questa tabella, più che sufficiente in terra americana, risulta assolutamente limitata in Europa, dove oltre alle lettere accentate, esistono altri alfabeti, come per esempio il cirillico, l'ebraico, il greco o l'arabo. Per questo motivo la tabella venne 'estesa' a 8 bit (come i codici binari nella tabella sopra), aggiungendo altri 128 caratteri, variabili a seconda della localizzazione: quindi, per esempio, nell'Europa centro occidentale conteneva le lettere accentate, in quella dell'est il cirillico, in Grecia il greco moderno. Dato che il valore binario era lo stesso, i documenti però venivano (e vengono) formattati a schermo in modo diverso a seconda dell'area geografica per cui era settato il pc. Facciamo un esempio pratico: alla posizione 133 della tabella estesa corrisponde per il latino occidentale la lettera à, ma per il greco ΰ ed per il cirillico р . Ora, il modo in cui il mio computer visualizzerà questo elemento dipende dalle impostazioni locali, perciò in linea di massima lo stesso documento apparirà con lettere completamente diverse a seconda della tabella ASCII estesa in uso in una particolare area geografica. Per avere un'idea delle sole tabelle iso-8859 (nome delle tabelle ASCII estese unificate specifiche per le areee con scrittura latina occidentale) si può fare riferimento a questo sito in inglese. Negli schemi presentati le posizioni sono espresse con il valore esadecimale corrispondente al numero binario. L'iso-8859 è solo una delle possibili codifiche adottate: i font creati per i vari sistemi operativi seguono solo in parte queste specifiche. I caratteri DOS e Windows, per esempio, hanno delle leggere differenze, mentre quelli per Macintosh usano una tabella ancora diversa (vedi questi esempi), per cui anche nell'ambito della scrittura occidentale potrebbe esserci una corrispondenza non completa passando da un elaboratore all'altro. La prima soluzione proposta per risolvere il problema dell'internazionalità fu quella di incorporare più codifiche (code page) nello stesso font, le une alternative alle altre. Il programma di videoscrittura aveva (e in molti casi ha ancora) la possibilità di specificare per un intero documento (o nel caso di programmi più complessi anche prima di ciascuna parola o frase) quale codifica doveva essere utilizzata nella visualizzazione del testo.
Queste soluzioni, oltre ad essere parziali, non sono in grado di codificare il numero di caratteri necessari per le lingue orientali, come per esempio cinese o giapponese, che possono avere più di 2000 simboli diversi. Per fare fronte a questa situazione dagli anni '90 si è iniziato a proporre un sistema di codifica non più a 1 byte (8 bit = 1 byte = 256 possibili valori) ma a 2, ampliando quindi il numero dei diversi simboli a più di 65000. Si tratta del sistema Unicode, il cui scopo è quello di assegnare a ciascun simbolo sempre lo stesso valore, generalmente espresso in esadecimale tra 0000 e FFFF. I simboli sono raggruppati in vari set che corrispondono in parte ai vari code page e set estesi preesistenti, cui sono stati aggiunti i caratteri orientali, notazioni musicali, simboli matematici e molto altro. Non tutte le posizioni sono attualmente occupate, dato che la creazione di set è un'operazione ancora in progresso. I font creati seguendo le specifiche unicode possono contenere uno o più di questi set di caratteri (fino a contenerli tutti come nel caso del mastodontico Arial MS unicode - arialuni.ttf) e sono attualmente utilizzabili sulla maggioranza dei sistemi operativi: Windows a partire dal 98, Macitosh dal OS 8.5, Unix e derivati con le opportune estensioni. Questo significa che, passando un file da un sistema operativo all'altro, o da una regione geografica all'altra, anche se non possiedo lo stesso font utilizzato nella versione originale, potrò sempre sostituirlo con un altro font unicode in cui sia presente lo stesso set di caratteri senza che il mio documento perda di leggibilità. Uno dei vantaggi ulteriori è che questo tipo di informazione si può applicare tra l'altro anche alle pagine web, permettendoci di far visualizzare pagine con caratteri greci in modo uguale in tutto il mondo (ma anche, più banalmente, le lettere accentate negli Stati Uniti).