...devátá část nemá příklad...
Většina počítačových služeb má problémy s neanglickými jazyky. Kolébka počítačů
a hlavní motor jejich rozvoje je v USA, kde se zdá zcela přirozené, že lidé
hovoří a píší anglicky. Zájmy jiných jazyků, používajících písmena s háčky,
čárkami, přehláskami a dalšími přívěsky, zpravidla přicházejí ke slovu až ve
druhé vlně.
Prosazovat tato pitoreskní písmena do prostředí heterogenní sítě je úkol téměř
nadlidský, protože jsou do ní zapojeni uživatelé s nejrůznějšími počítači,
operačními systémy a programy. Klasickým příkladem je elektronická pošta, v níž
většina české korespondence dodnes postrádá háčky a čárky. Kdykoli se někdo
pokusí prosadit v obecných diskusních skupinách jejich používání, bývá striktně
odmítnut. Přitom metoda pro přenos češtiny elektronickou poštou (MIME) je známa
již od počátku devadesátých let a o implementace také není nouze.

Ve Webu byl vývoj podstatně rychlejší. Příčina spočívá nepochybně v tom, že
WWW je především nástroj na šíření textů. Jejich omezení na písmena anglické
abecedy je při seriózním použití neakceptovatelné a proto se velmi rychle
začaly hledat cesty, kterými dostat české znaky ke čtenáři stránky v
nepoškozené podobě.
WWW navíc neklade z technického hlediska výraznější odpor. Protokol HTTP je
osmibitový a bez problémů přenáší znaky s kódem větším než 127 (což jsou
právě kýžená písmena se speciálními ozdobami). Také HTML se nebrání tomu, aby
se ve zdrojovém textu vyskytly.
Nejsou však zcela bez práce. Jako implicitní kód pro WWW stránky byl přijat
ISO 8859-1 (zvaný též ISO Latin 1). Ten obsahuje speciální znaky pro
jazyky západní Evropy (němčina, francouzština, skandinávské jazyky a podobně).
Pro nás v něm leccos schází (například háčkovaná písmena). Pro české stránky
tedy musíme použít jiný kód.
A rázem jsme v problémech. Jednotné kódování českých znaků bohužel neexistuje.
Jiné kódy jim přiděluje mezinárodní standard ISO 8859-2
(ISO Latin 2), který je zpravidla používán v operačních systémech
typu Unix, jiné kódy používají MS Windows na své kódové stránce 1250
(hořkou ironií je, že od ISO 8859-2 se liší jen v několika málo českých
znacích), jiné kódy má MacOS počítačů Apple a ještě jiné najdete v systému OS/2
(kódová stránka 852, zvaná též PC Latin 2). Navíc všechny
zmíněné systémy přišly s češtinou mnohem později, než jsme ji na svých
počítačích potřebovali. Proto jim předcházely některé tuzemské produkty, z
nichž se nejvíce rozšířil kód bratří Kamenických. Leckde žije dodnes (například
já v něm píši veškeré své texty).
Pokud stránku zapíšete v jednom z uvedených kódování a beze změny přepravíte ke
čtenáři, uvidí ji správně jen v tom případě, že používá stejný kód. To však
odporuje základní myšlence Webu, podle níž by stránky měly být srozumitelné pro
všechny uživatele. Nezbývá, než kódování znaků přizpůsobit operačnímu systému
uživatele. Může k němu dojít několika způsoby:
- stránky existují v několika variantách a uživatel si vybere tu, která mu
vyhovuje
- server přizpůsobí kódování při odesílání dokumentu
- server se o kód nestará a upraví jej až klient
Každá z uvedených variant má své výhody a nevýhody. V následujících odstavcích
se je pokusím popsat.

Tento způsob je nepochybně nejlepší a patří mu budoucnost. V návrhu HTML
verze 4.0 je doporučen jako jedině správná a de facto nezbytná cesta. Na
autora stránky klade pouze dva požadavky:
- musí zdrojový text zapsat v dostatečně standardním kódu (nejlépe
ISO 8859-2, akceptovatelná je i kódová stránka 1250
MS Windows)
- musí oznámit klientovi, který kód použil
Jelikož klient zná svůj operační systém a kódování znaků v něm, snadno si
převede kód dokumentu do svého prostředí. K vyznačení kódu, kterým je zapsán
dokument, poslouží protokol HTTP. Od verze 1.1 lze standardní hlavičku
Content-Type doprovodit douškou charset=XXX, která
řeší právě tuto úlohu. Pokud je dokument zapsán v ISO 8859-2, server by
jej měl odeslat s hlavičkou
Content-Type: text/html; charset=utf-8
Pro kódovou stránku 1250 by měl použít
Content-Type: text/html; charset=windows-1250
Záleží na prostředí, v němž se stránky nacházejí, zda server dokáže příslušnou
hlavičku generovat automaticky. V opačném případě se musí sám autor postarat o
její náhradu pomocí značky <META>. Konkrétně pro kód
ISO 8859-2 by do záhlaví dokumentu (uvnitř <HEAD>) musel
uvést
<META HTTP-EQUIV="Content-Type"
CONTENT="text/html; charset=utf-8">
Takový dokument je pak zcela soběstačný a nepotřebuje spolupráci serveru. Tuto
metodu musíte použít v případě, kdy server není k dispozici (stránky z
lokálního disku).
Překódování na straně klienta má řadu výhod. Klade na autora minimální nároky a
přitom je velmi univerzální (kromě chápajícího klienta nepotřebuje žádné další
prvky). Bez nejmenších problémů spolupracuje s vyrovnávacími pamětmi všeho
druhu.
Nevýhody jeho použití spočívají především ve starých klientech. Někteří nejen
neumí stránky překódovat, ale jakmile se v hlavičce Content-Type
objeví charset, odmítnou dokument zobrazit (nabídnou pouze uložení na
disk) nebo se dokonce zhroutí. Naštěstí procento takových muzeálních kousků
rychle klesá, ale dosud není nulové.
Bohužel i někteří moderní klienti se odmítají na změně kódu podílet. Například
můj Netscape Navigator 4.02 pro Unix (konkrétně IRIX) odmítá překódovat
stránky z Windows 1250 do ISO Latin 2. Vzhledem k tomu, že
překódování na straně klienta je prosazováno WWW konsorciem jako zcela
oficiální cesta, doporučuji si na ně zvolna zvykat a začít je používat.

Průkopnické kroky při používání českých znaků na stránkách patřily právě do
této skupiny. Autor uloží dokument v nějakém kódu (buď je jednotný pro celý
server nebo jej lze vyznačit v textu). WWW server jej pak při odesílání
upraví podle požadavků klienta. Většina řešení vychází ze standardního
mechanismu CGI programů, v poslední době se však objevilo i několik
rozšiřujících modulů pro nejběžnější WWW servery. Metody z této skupiny však
musí realizovat správce serveru. Na úrovni běžného uživatele zpravidla nebudete
schopni instalovat potřebné programy. Navíc musíte oplývat pokročilejšími
znalostmi o vašem serveru a jeho uspořádání.
Změna kódu se může odehrávat zcela automaticky. Pokud klient v dotazu pošle
hlavičku Accept-Charset, server se jí přizpůsobí. V opačném případě se
pokusí kód určit automaticky na základě informací z hlavičky
User-Agent. V ní klient zpravidla oznámí operační systém svého
počítače, z něhož ihned vyplývá potřebné kódování. Tímto způsobem pracují
současné rozšiřující moduly serverů. Jsou k dispozici pro Apache i Microsoft
Internet Information Server, což jsou dva nejrozšířenější programy na tomto
poli.
Automatická změna kódu (zejména bez asistence Accept-Charset) však
může podstatně zkomplikovat práci vyrovnávací paměti. Lokátor dokumentu zůstává
stejný a proto se může stát, že uživateli odpoví vyrovnávací server (proxy
cache) a pošle mu dokument ve špatném kódu.
Druhou nevýhodou je, že server v odpovědi nemusí identifikovat použitý kód.
Pokud to dělá, je asi rozumnější mu ušetřit práci a použít rovnou překódování
na straně klienta podle předchozí části. Když však neidentifikuje kód, klient
jej může změnit, protože se mylně domnívá, že stránka používá standardní
ISO 8859-1. Uživatel pak musí ručně nastavit, jak to vlastně je.
První problém odpadá, pokud změnu kódu realizuje CGI program. Pak se
identifikace kódu objeví v lokátoru - například z původního
/obsah.html
se při změně kódu na ASCII stane
/cgi-bin/toASCII/obsah.html
nebo
/cgi-bin/charset/obsah.html?ASCII
Vyrovnávací paměti pak nedělá problémy odlišit jednotlivé varianty. Ovšem
většina z nich neukládá cesty, které začínají /cgi-bin, takže jeden
problém s vyrovnávací pamětí byl nahrazen jiným. Nezanedbatelnou nevýhodou je
také zvýšená zátěž serveru a delší doba odezvy, způsobená startováním CGI
programu při každém dotazu.
Z historických důvodů tento způsob realizace češtiny převládá. Domnívám se
však, že bude postupně vytlačován překódováním na straně klienta. Proti němu
může nabídnout jedinou výraznou výhodu, kterou je překódování do čistého ASCII
(odstranění háčků a čárek). Pokud totiž uživatel nemá k dispozici písmo s
potřebnými znaky, současní klienti nedovedou převést "č" na "c" a zobrazí místo
něj jakýsi klikyhák.

Třetí cesta spočívá v tom, že stránky připravíte v několika různých kódech (za
pomoci patřičného programu, pochopitelně). Uživatel si pak jen vybere, o kterou
verzi má zájem.
Tato cesta nevyžaduje ze strany WWW prakticky žádnou podporu. Vše se odehrává
starými krotkými cestami a jedinou nadstandardní vymožeností je program, který
vyrábí jednotlivé kódové verze. Pokud možno by se měl chovat inteligentně, aby
například zbytečně nevyráběl několik kopií obrázků či podobné neefektivity.
Evidentním problémem tohoto řešení je větší spotřeba diskového prostoru, což
však při dnešních cenách disků příliš nepálí. Horší je, že pokud zapomenete
vygenerovat jednotlivé mutace, stane se obsah serveru nekonzistentním - v
různých kódech obdrží uživatel různé informace. Nejnepříjemnější by bylo, kdyby
někdo přišel s dalším kódováním (což se snadno může stát - například většina
současných programů nepodporuje UNICODE, který se pravděpodobně bude
prosazovat). Pak byste museli znovu generovat celý obsah serveru v dalším kódu.
Silnou devizou tohoto řešení je jeho bezproblémová spolupráce s čímkoli. V
oblasti kompatibility je jasná jednička. Přesto se s ním v praxi příliš
nesetkáte. Většina autorů zřejmě cítí, že tohle řešení je sice robustní, ale
nepříliš elegantní.

Značnou pohromu dokáží v českých znacích nadělat intuitivní uživatelsky
přátelské HTML editory, které všechno znají a všude byly dvakrát. Některé z
nich dbají na to, že znaky s kódem nad 127 by na stránkách měly být nahrazeny
odpovídajícími symboly. Aniž by se ptaly na váš názor, při uložení dokumentu
převedou písmeno "á" na "&aslash;" atd. Jelikož pro řadu znaků
nejsou příslušné symboly k dispozici (vycházejí ze znaků kódu ISO 8859-1),
nemůže to dopadnout dobře. Pokud se tato vlastnost nedá vypnout, je příslušný
editor pro české texty nepoužitelný.
Druhou nepříjemností může být automatické vkládání informace o použitém kódu
pomocí značky <META>. Pokud se rozhodnete používat změnu kódu na
straně klienta, je tato asistence vítána. Jestliže však preferujete jiný
způsob, může naopak překážet a k zajištění správné funkce musíte dotyčné značky
z textu vymazávat.
Velmi obsáhlé informace o práci s češtinou v Internetu a na počítačích obecně
najdete na stránce
http://www.cestina.cz/.
Tam hledejte i odkazy na jednotlivé programy, realizující zde popsané postupy.
|