Kody i szyfry
3. Kody alfanumeryczne
3.3. Unicode
W zapisie UTF-8 każdy znak UCS/Unicode jest przedstawiany w postaci sekwencji od jednego do sześciu 8-bitowych bajtów, zależnie od wartości samego znaku. Poniższa tabela obrazuje zasadę, na jakiej to się odbywa:
|
Tab. 7. UTF-8
0xxxxxxx |
: pierwszy i jedyny bajt sekwencji : drugi i dalsze bajty sekwencji : pierwszy bajt sekwencji 2-bajtowej : pierwszy bajt sekwencji 3-bajtowej : pierwszy bajt sekwencji 4-bajtowej : pierwszy bajt sekwencji 5-bajtowej : pierwszy bajt sekwencji 6-bajtowej |
Tab. 8. Znaczenie bajtu w zapisie UTF-8
W wielobajtowej sekwencji bity oznaczone 'x'-ami czytane od 1-szego, najstarszego bajtu tworzą właściwą wartość znaku UCS/Unicode. Z kolei wartość bieżącego bajtu wskazuje na jego miejsce w sekwencji UTF-8. W ten sposób zapis UTF-8 jest kompatybilny z 7-bitowym US-ASCII i zachowuje względną zwartość tekstów o niewielu znakach rozszerzonych, pozwalając jednocześnie na zapis nawet 31-bitowych wartości i na łatwą do realizacji synchronizację i interpretację przetwarzanych sekwencji.
Unicode | UTF-8 |
Hex | Hex |
0001 | 01 |
007F | 7F |
0080 | C2 80 |
07FF | DF BF |
0800 | E0 A0 80 |
0FFF | E0 BF BF |
1000 | E1 80 80 |
FFFF | EF BF BF |
Zapis UTF-8 jest nadmiarowy, bowiem np. wartościom 16-bitowym przyporządkowuje wartości 24-bitowe (3-bajtowe). W efekcie istnieje wiele ciągów bajtów, które nie są legalnymi sekwencjami UTF-8, nawet jeżeli wykonanie przekształcenia odwrotnego jest technicznie możliwe.
sekwencja | C0 80 | 11000000 10000000 |
maska | 110xxxxx 10xxxxxx | |
wynik | 00 | 00000 000000 |
Oprócz zapisu UTF-8 spotyka się czasem UTF-7 wykorzystujący tylko 7 bitów używanego słowa oraz UTF-16 będący po prostu zapisem kolejnych kodów.
A oto reprezentacja polskich „ogonków” w Unicode:
ą | 0105 | Ą | 0104 |
ć | 0107 | Ć | 0106 |
ę | 0119 | Ę | 0118 |
ł | 0142 | Ł | 0141 |
ń | 0144 | Ń | 0143 |
ó | 00F3 | Ó | 00D3 |
ś | 015B | Ś | 015A |
ź | 017A | Ź | 0179 |
ż | 017C | Ż | 017B |
Tab. 9. Polskie znaki w Unicode