Podręcznik
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