Home > Vocali italiane accentate Unicode UTF-8

VOCALI ITALIANE ACCENTATE UNICODE UTF-8


Esempio: Unicode associa alla lettera È (E con accento grave) il numero esadecimale C8 (Code Point).

Il numero equivalente in formato decimale è 200.

In formato binario è 11001000.

UTF-8 codifica i caratteri con un numero variabile di byte da 1 a 4.

I bit iniziali (fissi) di ogni byte indicano la natura di ogni singolo byte:

Num. byte byte 1 byte 2 byte 3 byte 4 Spazi liberi
1 0....... 7
2 110..... 10...... 11
3 1110.... 10...... 10...... 16
4 11110... 10...... 10...... 10...... 21

Bit iniziale 0: il byte, da solo, codifica un carattere; i byte di questo tipo corrispondono a quelli della codifica ASCII.

Bit iniziali 110: il byte è il primo di un gruppo di byte che codifica un carattere con 2 byte.

Bit iniziali 1110: il byte è il primo di un gruppo di byte che codifica un carattere con 3 byte.

Bit iniziali 11110: il byte è il primo di un gruppo di byte che codifica un carattere con 4 byte.

Bit iniziali 10: il byte appartiene a un gruppo (di 2, 3, 4 byte), ma non è il primo byte del gruppo. I byte di questo tipo vengono chiamati "di continuazione".

Con i puntini ho rappresentato gli spazi liberi in ogni byte. Questi spazi sono destinati a ospitare i bit del Code Point Unicode.

Abbiamo visto che Unicode associa alla È il numero binario 11001000, formato da 8 bit.

Un singolo byte ha solo 7 spazi liberi, quindi non è sufficiente a contenere 8 bit.

Una coppia di byte ha 11 spazi liberi, quindi è adatto allo scopo.

I bit di 11001000 vengono inseriti negli spazi liberi di 110.....   10...... procedendo da destra verso sinistra:

110...11   10001000

I 3 spazi liberi non utilizzati, nel primo byte, vengono riempiti con zeri:

11000011   10001000

11000011 = 195 decimale.

10001000 = 136 decimale.

Quindi in una stringa o in un file di testo UTF-8 la coppia di byte 195, 136 rappresenta la lettera È.


Vocali italiane accentate UTF-8

Vocale CP esa CP dec CP bin Byte 1 Byte 2
À (A grave) C0 192 11000000 11000011 (195) 10000000 (128)
Á (A acuto) C1 193 11000001 11000011 (195) 10000001 (129)
È (E grave) C8 200 11001000 11000011 (195) 10001000 (136)
É (E acuto) C9 201 11001001 11000011 (195) 10001001 (137)
Ì (I grave) CC 204 11001100 11000011 (195) 10001100 (140)
Í (I acuto) CD 205 11001101 11000011 (195) 10001101 (141)
Ò (O grave) D2 210 11010010 11000011 (195) 10010010 (146)
Ó (O acuto) D3 211 11010011 11000011 (195) 10010011 (147)
Ù (U grave) D9 217 11011001 11000011 (195) 10011001 (153)
Ú (U acuto) DA 218 11011010 11000011 (195) 10011010 (154)
à (a grave) E0 224 11100000 11000011 (195) 10100000 (160)
á (a acuto) E1 225 11100001 11000011 (195) 10100001 (161)
è (e grave) E8 232 11101000 11000011 (195) 10101000 (168)
é (e acuto) E9 233 11101001 11000011 (195) 10101001 (169)
ì (i grave) EC 236 11101100 11000011 (195) 10101100 (172)
í (i acuto) ED 237 11101101 11000011 (195) 10101101 (173)
ò (o grave) F2 242 11110010 11000011 (195) 10110010 (178)
ó (o acuto) F3 243 11110011 11000011 (195) 10110011 (179)
ù (u grave) F9 249 11111001 11000011 (195) 10111001 (185)
ú (u acuto) FA 250 11111010 11000011 (195) 10111010 (186)

Capienza teorica dei byte UTF-8

Un singolo byte ha 7 spazi liberi, che possono rappresentare 27 (128) valori appartenenti all'intervallo 0-127 (0-7F).

2 byte hanno 11 spazi liberi, che possono rappresentare 211 (2048) valori appartenenti all'intervallo 0-2047 (0-7FF).

3 byte hanno 16 spazi liberi, che possono rappresentare 216 (65536) valori appartenenti all'intervallo 0-65535 (0-FFFF).

4 byte hanno 21 spazi liberi, che possono rappresentare 221 (2097152) valori appartenenti all'intervallo 0-2097151 (0-1FFFFF)

Questo permette di calcolare, per ogni Code Point, il numero di byte necessari per la codifica UTF-8:

CP intervallo 0-127 (0-7F): codifica con un byte;

CP intervallo 128-2047 (80-7FF): codifica con 2 byte;

CP intervallo 2048-65535 (800-FFFF): codifica con 3 byte;

CP intervallo 65536-2097151 (10000-1FFFFF): codifica con 4 byte.

La capienza è teorica, perché non tutti i valori possibili sono utilizzabili.


Codifica overlong

Un gruppo di 3 byte contiene 16 spazi liberi:

1110....   10......   10......

Anche questo gruppo può contenere il byte 11001000 (È):

1110....   10....11   10001000

11100000   10000011   10001000

I 3 byte, in formato decimale, sono 224, 131, 136.

Le regole UTF-8 vietano l'utilizzo di codifiche siffatte.

Bisogna usare il minimo numero di byte possibile, in questo caso 2.

Le codifiche overlong sono vietate perché implicano:

spreco di memoria;

violazione della corrispondenza biunivoca fra caratteri e codifiche;

problemi di sicurezza.

Programmi diversi possono avere diversi comportamenti, quando si trovano a gestire stringhe e file con codifiche overlong.


Home


posta@corradodamiano.it

www.corradodamiano.it