Ogonki w Unikodzie


Po co kolejny nowy standard ?

Może i kolejny, ale za to ostatni. Można zadać jeszcze lepsze pytanie: po co w ogóle jakikolwiek standard ?! I to jest dobre pytanie. Sens Unikodu polega na tym by nie było wielu standardów tylko jeden wspólny na całym świecie dla każdego zastosowania.

Unikod (ang. Unicode) jest nowoczesnym sposobem kodowania obejmującym znaki używane na całym świecie w tym wielu, jak nie wszystkich krajów (np. polskie, hieroglify czy cyrylicę), symbole muzyczne, techniczne, wymowy (skrypt „Rozszerzenia IPA”) i inne często spotykane. Ogółem w wersji 3.0 Unikodu jest 49194 znaków. W odróżnieniu od dotychczas używanych sposobów, kod numeryczny jednoznacznie identyfikuje symbol. Nie ma sytuacji, że dany kod może oznaczać różne symbole w zależności od numeru strony czy innego znacznika. Wynika z tego możliwość swobodnego mieszania znaków różnych krajów bez obawy o niejednoznaczność. Istotę Unikodu zgrabnie odzwierciedla określenie alfabet uniwersalny.

Unikod jest zasadniczo oparty na zbiorze znaków określanym jako BMP (ang. Basic Multilingual Plane) czy Usc-2 możliwowym do zapisania na 16-tu bitach. Stąd domyślne kodowanie Utf-16 zorientowane jest właśnie na przetwarzanie łańcuchów w takich porcjach. Ten 16-bitowy zestaw znaków odpowiada zresztą zdefiniowanym znakom bliźniaczego standardu Iso-10646, który jednak w założeniach jest 32-bitowy. Pierwsze 128 znaków odpowiada kodom ASCII.

Określono także kilka innych podzbiorów o małym znaczeniu praktycznym jak MES i EES. Wydaje się, że mają one znaczenie głównie dla produkcji fontów, które zawsze będą pozostawały w tyle za aktualnym Unikodem.


Sposoby kodowania

Ze względu na to iż nie wszystkie dostępne systemy i programy zdolne są do wspierania Unikodu w pełnym zakresie oraz dla zapewnienia bezproblemowego transferu danych przy użyciu takich systemów określono kilka sposobów kodowania:

Specyfiką kodowań UTF-7 i UTF-8 jest przesyłanie kodów ASCII praktycznie bez zmian. Tylko kody większe niż 127 podlegają modyfikacji. Dzięki temu polskie teksty powiększają swoją objętość tylko o niewielki procent (kilka..kilkanaście) zamiast dwukrotnie lub czterokrotnie. Dla przykładu czytany właśnie dokument, zakodowany jako UTF-8 w stosunku do jakiegoś tradycyjnego kodowania 8-bitowego „urośnie” zaledwie o 3.8%. Niestety nie z każdym językiem mamy do czynienia z taką specyfiką. W innych dochodzi wręcz do powiększenia rozmiaru danych potrzebnych do zapisania tekstu. Nie można więc traktować Utf-8 jako kompresji. Właściwą kompresją Unikodu jest SCSU (Standard Compression Scheme for Unicode).

Dla dokumentów znacznikowych w szczególności Sgml, Html czy Xml możliwe jest także kodowanie przy użyciu numerycznych i tekstowych encji czyli sekwencji o postaci &[#]nnnn; i &aaaaa;. Nie wydaje się jednak by było to sensowne, skoro cały dokument może być w Unikodzie.

Istotną rzeczą jest, że dokumenty przesyłane drogą internetową zgodnie z Mime powinny być oznaczone co do typu zawartości w tym odpowiednim kodowaniem. W nagłówku przesyłki Mime znajdzie się zwykle pole Content-Type. Jeśli zawartość jest typu tekstowego np. text/plain czy text/html to może zawierać także deklarację kodowania. Jeśli nie, kodowanie może być zawarte w nagłówku dokumentu Html, czyli części objętej znacznikiem body. Innym sposobem już ewidentnie zorientowanym na Unikod, bo nie jak poprzednie stosowanym także do tradycyjnych kodowań stronicowanych, jest rozpoczynanie dokumentu sekwencją Bom oznaczającą zasadniczo kolejność bajtów, w związku z istnieniem różnych architektur sprzętowych. Najczęściej spotyka się kolejność Little Endian nieprawidłowo oznaczaną jako utf-16, które dotyczy właśnie Big Endian. Bywa, że dla danego zastosowania Unikodu sposób kodowania jest znany, więc deklaracje albo pomija się całkiem, albo jest opcjonalna. Tak jest np. w przypadku używania Unikodu w odwołaniach Api systemu Windows (Utf-16Le), protokołach internetowych (zwykle Utf-8) czy dokumentach Xml (domyślnie Utf-8). Powtórne oznaczenie np. w nagłówku Html po deklaracji w nagłówku Mime, może skutkować niejednoznacznością a w przypadku kodowań 16-to i 32-bitowych jest całkiem zbyteczne, bo warunkiem ustalenia jest uprzednie podanie.


Nagłówki dokumentów i zastosowanie

Specyfika Internetu powoduje, że do zapisania tekstów używających znaków narodowych używa się wielu kodowań. Aby zapewnić możliwość rozkodowania takich tekstów, poprzedzać je musi czytelna deklaracja kodowania. Choć celem Unikodu jest ujednolicenie systemów kodowań to ze względu na zaszłości historyczne a także techniczne ograniczenia zmuszające do używania wielu kodowań samego Unikodu, użycie go rzadko zwalnia od takiej deklaracji. W zależności od zastosowania stosuje się:

W deklaracji występuje zwykle nazwa kodowania, czyli dla unikodowych będzie to Utf-7, Utf-8, Utf-16, Utf-16Le, Utf-16Be, Utf-32, Scsu tak, jak są one
zarejestrowane przez Iana. Tworzenie dokumentów unikodowych nie różni się niczym od dokumentów w innych kodowaniach poza swobodą używania dowolnych znaków.


Polskie znaki

Litera

Kod

heksadecymalny (&#x...;)

dziesiętny (&#...;)

ą

0105

261

ć

0107

263

ę

0119

281

ł

0142

322

ń

0144

324

ó

00F3

243

ś

015B

 347

ź

017A

 378

ż

017C

 380

Ą

0104

 260

Ć

0106

 262

Ę

0118

 280

Ł

0141

 321

Ń

0143

 323

Ó

00D3

211

Ś

015A

 346

Ź

0179

377

Ż

017B

379

201E

8222 

201D

8221


Inne znaki

Wymieńmy tylko kilkanaście z potężnego zbioru Unikodu: €∑∏∆∂≠≈≡⅓⅜⅛⅔⅝⅞µ§™₣₤₧←↑→↓↔↕∑∏∟∫≤├├┤┬┴⌡⌠╩╪╫╬►▼◄♠♣♥♦. Wyglądy oraz kody znaków możesz znaleźć na witrynie konsorcjum Unicode. Możesz nawet wstawić na stronę obraz dowolnego znaku pobierany z serwisu znaków Unikodu np. znaku Euro () wstawiając w dokument Html'owy kod „<IMG SRC="http://charts.unicode.org/Glyphs/20/U20AC.gif">” podający kod szesnastkowy znaku przynajmniej dotąd aż serwer autorów serwisu nie wyczerpie swoich możliwości a nic nie stoi na przeszkodzie by powstały kolejne tego rodzaju serwisy np. polskie. Więcej informacji o używaniu dowolnych znaków Unikodu na stronach łebowych przy użyciu encji można znaleźć w dokumentacji Html'a 4.01 na witrynie W3C


Oprogramowanie


Pożyteczne odnośniki


Przykładowe witryny (strony)


Uwagi

Trudno podważać status Unikodu jako podstawowego standardu kodowania w Internecie ponieważ praktycznie każdy nowopowstająca specyfikacja, standard czy język opierają się na nim. Jednym z przykładów użycia Unikodu jest użycie go przez specyfikację Html4.0 w roli zestawu znaków, na którym opierają się wszystkie dokumenty w tym języku. To samo ma miejsce w specyfikacji Wap, np. języku Wml bazującym z kolei na Xml'u. Takie same deklaracje można spotkać w draftach dotyczących takich protokołów jak Nntp, gdzie translacja Utf-8 ma być domyślną w nagłówkach przesyłek nie wymagającą tradycyjnej deklaracji Mime.


Strona ta powstała jako część Polskiej Strony Ogonkowej (PSO). Została przygotowana przez Piotra Trzcionkowskiego na podstawie dyskusji prowadzonych na ogólnopolskiej grupie dyskusyjnej pl.comp.ogonki z udziałem Qrczaka, Juliusza Chroboczka, Fidela, Wojciecha Myszki i wielu oponentów, a także na podstawie materiałów osiągalnych w Internecie. Obecnie jest zupełnie niezależną witryną z własną domeną internetową http://www.unikod.pl/.


Wszelkie prawa zastrzeżone © Piotr Trzcionkowski 1997-2005