139
Unicode określa jedynie jakiej liczbie odpowiada jaki znak. nie mówi zaś nic o sposobie dekodowania (tzn. jaka sekwencja znaków odpowiada jakiemu znaku/znakoui). Jako że Unicode obejmuje 918 tys. znaków, zmienna zdolna pomieścić go w całości musi mieć przynajmniej 3 bajty. Niestety procesory nie funkcjonują na zmiennych o tym rozmiarze, pracują jedynie na zmiennych o wielkościach: 1. 2. 4 oraz 8 bajtów (kolejne potęgi liczby 2). Dlatego też jeśli wciąż uparcie chcemy być < lok ładni i zastosować przejrzyste kodowanie musimy skorzystać ze zmiennej 4-bajtowej (32 bity). Tak do sprawy podeszli twórcy kodowania Unicode nazwanego
UTF-32/UCS-4. Ten typ kodowania po prostu przydziela każdemu znakowi Unicode kolejne Zobacz w Wikipedii: UTF-
liczby. Jest to nujbardziej intuicyjny i wygodny typ kodowania, ale jak widać ciągi znaków 32
zakodowane w nim są hardzo obszerne, co zajmuje dostępną pamięć, spowalnia działanie
programu oraz drastycznie |>ogarsza wydajność podczas transferu przez sieć. Poza UTF-32
istnieje jeszcze wiek- innych kodowali. Najpopularniejsze z nich to:
• UTF-8 od 1 do G bajtów (dla znaków poniżej 65536 do 3 bajtów) na znak przez co jest skrajnie niewygodny, gdy chcemy prze|>rowudzać jakiekolwiek operacje na tekście bez korzystania z gotowych funkcji
• UTF-16 2 lub 4 bajty na znak; ręczne modyfikacje łańcucha są bardziej skomplikowane niż przy UTF-32
• U CS-2 2 bajty na znak przez co znaki z numerami powyżej 65 535 nie są uwzględnione; równie wygodny w użytkowaniu co UTF-32.
Ręczne operacje na ciągach zakodowanych w UTF-8 i UTF-16 są utrudnione, ponieważ w przeciwieństwie do UTF-32. gdzie można określić, iż powiedzmy 2. znak ciągu zajmuje bajty od 4. do 7. (gdyż z gór,- wiemy, że 1. znak zajął bajty od 0. do 3.), w tych kodowaniach musimy najpierw określić rozmiar 1. znaku. Ponadto, gdy korzystamy z nich nie działają wtedy funkcje udostępniam" przez biblioteki C do operowania na ciągach znaków.
Priorytet |
Proponowane kodowania |
mały rozmiar |
UTF-8 |
łatwa i wydajna edycja |
UTF-32 lub UCS-2 |
przenośność |
UTF-8'* |
ogólna szybkość |
UCS-2 lub UTF-8 |
Co należy zrobić, by zacząć korzystać z kodowania UCS-2 (domyślne kodowanie dla C):
• powinniśmy korzystać z typu wcliar.t (ang. “wide character"), jednak jeśli chcemy udostępniać kod źródłowy programu do kompilacji na innych platformach. powinniśmy ustawić odpowiednie parametry dla kompilatorów, by rozmiar był identyczny niezależnie od platformy.
• korzyst amy z odpowiedników funkcji operujących na typie char pracujących na wcliar.t (z reguły składnia jest identyczna z tą różnicą, że w nazwach funkcji zastępujemy “str“ na “wcs“ np. strepy — wesepy; stremp — wesemp)
• jeśli przyzwyczajeni jesteśmy do korzystania z klasy string. powinniśmy zamiast niej korzystać z wstring. która posiada zbliżoną składnię, ale pracuje na typie wcliar.t.
Co należy zrobić, by zacząć korzystać z Unicode:
• gdy korzystamy z kodowali innych niż UTF-16 i UCS-2. powinniśmy zdefiniować własny typ
• w wykorzystywanych przez nas bibliotekach podajemy typ wykorzystanego kodowania.
• gdy chcemy ręcznie modyfikować ciąg musimy przeczytać specyfikację danego kodowania; są one wyczerpująco opisane na siost rzanym projekcie Wikibooks — Wikipedii.
Przykład użycia kodowania UCS-2: