UTF-8 è una codifica UTF che permette di codificare caratteri ISO 10646 usando da 1 a 6 byte per ogni carattere, mantenendo l’ordinamento dei caratteri; i caratteri US-ASCII vengono codificati con un unico byte, anzi hanno esattamente la stessa codifica in ASCII e in UTF.
Nel codice UTF-8 i 127 caratteri ASCII di base (codici da 00000000h a 0000007Fh) sono codificati con un unico byte con valori da 00h a 7Fh, cioè esattamente la codifica ASCII.
Tutti gli altri caratteri vengono codificati con una sequenza multi-byte (da 2 a 6 byte) i cui byte hanno esclusivamente valori da 80h a FDh (i valori FEh e FFh non sono mai usati) e quindi non possono essere confusi con caratteri ASCII. Il primo byte della sequenza è sempre un valore tra C0h e FDh e individua la lunghezza della sequenza; i byte seguenti hanno valori tra 89h e BFh; questo permette di individuare dove inizia la codifica di ogni carattere.
Lo schema usato per la rappresentazione di ogni carattere è quello indicato nella seguente tabella dove i caratteri x sono riempiti coi bit del codice UCS rappresentato in binario.
Codice UCS del carattere | Codice UTF |
---|---|
00000000 – 0000007F | 0xxxxxxx |
00000080 – 000007FF | 110xxxxx 10xxxxxx |
00000800 – 0000FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
00010000 – 001FFFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
00200000 – 03FFFFFF | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
04000000 – 7FFFFFFF | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
Per i caratteri Unicode bastano sequenze multi-byte da 1 a 3 byte.
Codice Unicode in esadecimale | Codice Unicode in binario | Codice UTF in binario | Codice UTF in esadecimale |
---|---|---|---|
00A9h | 0000 0000 1010 1001 | 11000010 10101001 | C2h A9h |
2260h | 0010 0010 0110 0000 | 11100010 10001001 10100000 | E2h 89h A0h |