☢☠☣☭☮☯ – krótko o UTF-8
Jak powszechnie wiadomo: standardy są bardzo dobre, dlatego trzeba ich stworzyć jak najwięcej. Nie inaczej jest z kodowanie znaków. Standardów kodowania znaków jest co najmniej kilka i jak zawsze… każdy lepszy od drugiego.
Oto kilka z nich używanych w Polsce:
- ASCII – stanowiący bazę dla wszystkich innych
- CP852 – znany z systemów DOS i kompatybilnych
- CP1250 – z systemów Windows; “standard” firmy Microsoft
- Mazovia – trochę zapomniany Polski wynalazek
- ISO8859 – w różnych odmianach (ISO8859-2 z polskimi znakami diakrytycznymi); standard światowy wykorzystywany głównie w systemach UNIX’owych
- Unicode – a właściwie najpopularniejsza implementacja, czyli UTF-8; nowy światowy standard
Dziś krótko o UTF-8, który mimo że istnieje już od jakiegoś czasu to dopiero teraz zaczyna zdobywać coraz większą popularność.
Na początek, czym się różni Unicode od UTF-8? Unicode opisuje tylko przydział poszczególnych numerów kodowych do znaków, nie opisuje natomiast sposobu zapisywania tych kodów w komputerze. To właśnie określa standard UTF-8. Jest jeszcze drugi standard konkurujący z UTF-8 (jakże by inaczej) – UCS-4, jednak nie jest on tak popularny.
UTF-8 jest kodem zmiennej długości który może zajmować od jednego do sześciu bajtów. Maksymalna można wykorzystać 31 bajtów do zakodowania znaku.
Aby zapewnić zgodność z ASCII pierwsze 127 znaków kodowane jest tak samo, na pojedynczym bajcie. Kolejne znaki kodowane są na większej ilości bajtów. W takim przypadku pierwszy bajt na początku zawiera liczbę jedynek odpowiadającą ilości bajtów użytych do zakodowania znaku, po nich następuje zero, a potem już bity kodujące znak. Każdy kolejny bajt tego znaku zaczyna się od sekwencji “10” która w prosty sposób oznacza iż jest to bajt z danymi. Nie da się go pomylić z pierwszym bajtem kolejnego znaku, ponieważ pojedyncza jedynka na początku pierwszego bajtu oznaczała by że kodowany znak będzie się składał tylko z jednego bajtu, a tego przecież nie zaznaczamy tylko stosujemy kodowanie ASCII. A po wypisaniu wszystkich możliwości wygląda to tak:
- 0x00 do 0x7F - bity 0xxxxxxx
- 0x80 do 0x7FF - bity 110xxxxx 10xxxxxx
- 0x800 do 0xFFFF - bity 1110xxxx 10xxxxxx 10xxxxxx
- 0x10000 do 0x1FFFFF - bity 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
- 0x200000 do 0x3FFFFFF - bity 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- 0x4000000 do 0x7FFFFFFF - bity 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Gdzie “x” oczywiście oznacza bajty kodowanego znaku.
UTF-8 jednak wcale nie jest standardem idealnym. Jego najpoważniejsza wadą jest to że większość znaków można zakodować na kilka sposobów, gdyż nie trzeba ich kodować koniecznie na najmniejszej możliwej ilości bajtów. To powoduje że znaki “niebezpieczne” dla serwerów, jak np “/”, które normalnie są odfiltrowywane w swojej najkrótszej formie kodowania, czasem daje się przemycić ponieważ programiści nie dopilnowali filtrowania wszystkich kombinacji. Technicznie nie jest to błąd standardu, ale nakłada dodatkową prace na wszystkich którzy chcą implementować UTF-8 w swoich aplikacjach.
Recent Comments