Unicode
Na FIDONETu jsou vsichni lide v .42 zvykli pouzivat jednotne kodovani - kodovani bratri Kamenickych (CP-895). Toto kodovani se vyznacuje tim, ze se da cist i bez nahraneho fontu a je kompatibilni se vsemy druhy ramecku. IBM (&M$) ale neuznalo kameniky, takze vzniklo CP 852 (PC Latin 2). Toto kodovani se cte bez fontu velmi tezko a skuste si pod nim spustit Volkova... Pokud se podivame na Windoze, zjistime, ze maji take vlastni kodovani (a ne jedno). V cz & sk se nejvice rozsirilo (respektive bylo vnuceno) Windows-1250. A aby to nebylo prilis jednoduche, na internetu se rozmnozila dalsi kodovani, ISO-8859-x. Nejcasteji se v nasich podminkach setkame s iso-8859-2 (podobne PC Latin 2) a iso-8859-1 (podobne PC Latin1).

Pokud si vememe stav ceskych webserveru, stranky jsou psany nejcasteji v windoze-1250 a obcas i v iso-8859-2. Proboha, lidi, proc to delate platform-dependent? Aha... asi to bude tim, ze vetsina web-stranek je napsana ve Windoze a ty jaksi s iso-8859-2 nepocitaji... Dal se podivejme do meho mailboxu; chodi mi zpravy z FIDA (kamenici) a z inetu (us-ascii, iso-8859-2, wir-1250, iso-8859-1). Kdo to ma potom cist? Chtelo by to nejakou rozumnou kodovou stranku pro vsechny platformy a zeme. Toto reseni jiz nekolik mnoho let existuje a jmenuje se unicode. Je pravda, ze neni zdaleka dokonale, ale rozhodne IMHO nejlepsi co zatim existuje, takze bychom toho meli nalezite zneuzivat (a nebo psat us-ascii...). Problem je v tom, ze unicode podporuje IMHO prilis malo programu a lidi.

Jak to cele pracuje? Bezne se pro diakritiku vyuziva hornich 0x80 znaku ascii tabulky. To ale zdaleka nestaci pro vsechny jazyky, takze mame plno kodovych stranek. Predstavte si, ze pisete program, ktery by mel pracovat spravne po celem svete. Musite do nej dodelat bud velke mnozstvi fontu, nebo konverznich tabulek. Obe reseni jsou IMHO neefektivni. Unicode to resi jinak; na kazdy znak je venovano 16bitu. Tech 65536 znaku jiz staci na vyjadreni snad vsech v pocitacove oblasti dulezitych jazyku, dokonce jsou jiz podporovany i ruzne "exoticke" jazyky. V soucastne dobe je v unicode asi 40k znaku, tzn uz je vycerpana vetsi polovina vsech moznych. Jiste ted' zacnete namitat, ze se nam vyskytuje dalsi problem, a to nejaky rozumny font. To je prave problem unicode; neexistuje kompletni font. To se da ale obejit tim, ze pouzijete jiz existujici nekompletni font a v pripade potreby doplnite nektere znaky. Dalsim problemem je shaneni konverznich tabulek do unicode z jednotlivych kodovych stranek.

Na kazdy znak 16bitu? Neni to trochu moc velke plytvani mistem? Vzdyt vetsina pismen je bez diakritiky... I tento problem unicode resi. Nemusite totiz zapisovat vsechny znaky jako 16ti bitove, ale muzete je ulozit pomoci UTF-8. Vetsina znaku je v rozmezi 0x00-0x7F, nektere v 0x80-0x7FF, a pak ten malo pouzivany zbytek. Tu prvni skupinu zapiseme jako 0xxxxxxx, tzn msb je == 0, ostatni jsou data. Druha skupina bude zapsana jako 110xxxxx 10xxxxxx. A nakonec ta treti 1110xxxx 10xxxxxx 10xxxxxx. Tim jsme tedy usetrili velke mnozstvi mista. UTF-8 take umoznuje rozpoznat velmi jednoduse, kde zacina UTF8-char.

Typickym pripadem, kdy M$ nezvladl nejakou technologii je unicode. Skuste se podivat do Wir2095 a uvidite, ze moznost pouziti unicode je temer nulova. Pokud se ale podivate na .exe z win (PE format), uvidite, ze vetsina resources je ulozena prave v unicode.

Jak je to s podporou v programovacih jazycich? Java ma unicode native, takze si muzete nejakou tridu pojmenovat treba "Tr~i'da". Horsi to je u C/C++, tam sice muzete (vetsinou) zapsat unicode string jako L"string", tedy treba uniprint(L"Unicode string");, ale funkci pracujicich s unicode je minimum (hlavne v komercnich C/C++...). S ostatnimi jazyky (Fortran, ...) jsem nemel tu cest, ale tam to bude pravdepodobne podobne, ne-li horsi.

Pokud mate zajem o dalsi informace, hlavni sajta unicode je kupodivu www.unicode.org. Potom muzete taky skusit www.cestina.cz. Dobre prekladove tabulky unicode-codepage jsou v NetWare. Bohuzel jim tam chybi prave ty nejzajimavejsi. Samozrejme plno veci naleznete take v Jave a Linuxu (/usr/lib/kbd/).


Copyright (c)1998 Martin Hinner, All rights reserved.