Ogni calcolatore deve poter ricevere e fornire informazioni con gli umani, e quindi è necessario che riconosca almeno i caratteri dell’alfabeto. I calcolatori per utilizzare questi caratteri gli assegnano loro un numero naturale, questo è chiamato codice o codifica dei caratteri. Infatti due calcolatori per poter comunicare tra di loro è necessario che utilizzino lo stesso codice, per questa ragione sono stati definiti alcuni standard :
- ASCII ( American Standard Code for Information Interchange )
- UNICODE
- UTF-8
ASCII
È il codice più utilizzato e per codificare un carattere e utilizza 7 bit ( sarebbe 1 byte → 8 bit e il primo bit a 0 ), che quindi può codificare 128 caratteri .
I codici iniziali che vanno da 0 a 1F sono caratteri di controllo e non sono stampabili :

Il problema è che questa codifica funziona bene con il linguaggio anglosassone e non per altre lingue con caratteri diversi, infatti 128 caratteri non bastano ( il cinese ha circa 7000 caratteri e non ha l’idea dell’alfabeto ).
Il primo tentativo era di utilizzare un bit in più ( diventava così a 8-bit ) in modo da arrivare a 256 caratteri chiamato Latin-1.
Questo tentativo non bastò, così un gruppo di produttori di calcolatori ha creato un nuovo sistema chiamato UNICODE.
UNICODE
L’idea sarebbe nell’assegnazione ad ogni carattere un valore a 16-bit chiamato code-point, il fatto che sono 16-bit rende più facile la scrittura di programmi. Con 16-bit abbiamo quindi 65 536 code point ( combinazioni ), inoltre il consorzio ha deciso di usare Latin-1 per i code point compresi tra 0 e 255, rendendo facile la conversione tra ASCII e UNICODE.
I problemi dell’UNICODE sono :
- ordinamento degli ideogrammi : mentre le lettere dell’alfabeto latino sono nell’ordine corretto, gli ideogrammi Han non sono ordinati come nel dizionario
- nascita di nuove parole ⇒ nuovi ideogrammi nel giapponese
- utilizzo dello stesso code point per caratteri giapponesi e cinesi che hanno aspetto simile, siccome i code point sono limitati
Cosi nel 1996 furono aggiunti 17 plane ( piani ) da 16 bit ciascuno portando il numero di caratteri a 1 114 112 .
UTF-8
Ok come facciamo a rappresentare un code point in binario? Sono stati sviluppati vari modi ma il più utilizzato è lo standard UTF-8 ( Universal Character Set Transformation Format ) che può codificare 2 miliardi di caratteri. UTF-8 è un sistema a lunghezza variabile per i caratteri UNICODE, ovvero che non tutti i caratteri utilizzano lo stesso numero di byte
- alcuni 1 byte ( come ASCII )
- altri 2, 3, o 4 byte

L’algoritmo di codifica funziona in questo modo :
- se si necessitano più byte, il primo bit più significativo del primo byte è impostato a “uni” per indicare se servono bytes.
- se si necessitano più byte, il secondo byte dopo il primo inizia sempre con

Example
Il carattere א ( alif dall’arabo ) corrisponde all’UNICODE : U+05D0, ovvero al valore binario , quindi necessita sicuramente di bytes, quindi avremo uno schema del genere da “riempire” :
quindi se iniziamo a prendere dal bit che vale di più ( ovvero il primo da sinistra verso destra ) riusciamo a riempire perfettamente lo schema :
ovvero in hex :
I vantaggi nell’utilizzare questo sistema sono :
- ottimizzato, infatti basta 1 byte per ASCII
- auto-sincronizzante, infatti dal numero di “uni” è possibile determinare il numero di byte del carattere
- se si scoprissero nuove lingue, il sistema è in grado di codificarle
