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/).