Diakritika na HTML stránkách.
O problémech s českými fonty píšu na stránce o formátovacích chybách. Konkrétní znaky různých kódování lze najít v kódových tabulkách. Rozpoznat problém můžete na diagnostické stránce. V tomto textu vyjadřuji pouze vlastní názory a poznatky.
Co je kódování - Nejčastější kódování - Argumenty pro Windows-1250 - Argumenty pro ISO 8859-2 - Různá řešení - Nastavení v prohlížeči - Automatické meta nastavení - Překódování na serveru - Altavista a spol. - Unicode - Speciální znaky - Opera - Mozilla, doctype a windows-1250 - Překódování
Počítač chápe každé písmenko jako číslo od 0 do 255 (jeden bajt).
Američané a Angličané (a programátoři) si vystačí se 128 znaky, protože se John Wicliff (britská obdoba Mistra Jana Husa) nepletl do věcí, kterým nerozuměl, čili nemají nabodeníčka. Těmto základním 128 znakům se říká ASCII.
Dalšími čísly od 128 do 255 se označily diakritizované znaky jazyků západní Evropy, a tak vznikl kód Latin-1. V něm české znaky nejsou (s výjimkou á a í).
Pro neazbukové jazyky střední a východní Evropy vznikly různé kódy, které zachovávají význam prvních 128 znaků ASCII (normalni pismena), ale dalších 128 znaků si definují po svém. A právě různá přiřazení diakritizovaných znaků číslům od 128 do 255 se označují jako kódování.
Hodně různých lidí si usmyslelo, že udělají kódování češtiny, jenomže to každý udělal jinak.
V poslední době převládají dvě kódování češtiny:
- ISO 8859-2
- Windows-1250
ISO 8859-2 je, jak už název napovídá, kódování standardnější, používané na Unixu a na Linuxu, ale i v mnoha windowsáckých programech. Někdy se označuje jako Latin 2, Microsoft jej nazývá "Středoevropské jazyky (ISO)".
Windows-1250 je preferováno na Windowsech a jeho obliba roste zejména kvůli tomu, že jej používá FrontPage jako základní kódování (třebaže se dá přepnout).
Další kódování jako kód bratří Kamenických, Mac nebo čeština pro Dos se dnes již na webu užívají tak zřídka, že jim nyní nebudu věnovat pozornost. Kód Unicode je zase hudbou vzdálené budoucnosti.
Můžete si prostudovat kompletní grafické znázornění znaků jednotlivých kódování v tabulkách.
Nejpoužívanější kódování ISO 8859-2 a Windows 1250 se v oblasti českých znaků od sebe odlišují pouze v šesti znacích -- š, ž, ť, Š, Ž, Ť. Pro zájemce jsem napsal rozdíly kódování mezi ISO a WIN pro nahrazování altem.
Notepad (nejjednodušší texťák, ve kterém se to přepnout nedá) používá pouze kódování windows-1250. Kdo chce tedy používat pro úpravy stránek Notepad (a třeba já chci), ten buď musí používat windows-1250, nebo se naučit těch psát v ISO pár znaků pomocí altu s čísly.
Mnohé vyhledávače publikují výsledky primárně v kódu Windows (konkrétně zjištěno u jinak perfektního Redboxu). Protože si s kódováním nelámou hlavu, vypisují úryvky v tom kódu, ve kterém ho našly, takže je to někdy trochu nečesky.
Jste-li tvorové windowsáčtí (a budete navždy), používejte kódování Windows. Dostanete se do menšího počtu problémů.
Pokud nebudete stránky psát v Notepadu nebo nejste zaměstnanci firmy Malýměkký, rozhodně doporučuji kódování ISO 8859-2. Já jsem dříve používal Windows-1250, nyní ISO 8859-2.
Zásadní vtip je v tom, že ISO je kódování výhradně používané v Unixu a Linuxu. Samozřejmě že Unixovské a Linuxovské programy windowsácké kódování nějak zvládnou (přinejhorším se ty programy trochu přepíšou), ale nedělá to dobrotu.
Dalším sice pochybným (přesto často uváděným) argumentem je fakt, že je to kódování "standardní".
Fajn, máme tady několik různých kódování. Text se prostě napíše v některém z nich. Teď jde o to JAK říci prohlížeči u čtenáře (obecně klientovi), v jakém kódování text je, aby se to správně zobrazilo:
Moderní prohlížeče (od verze tuším 3, kromě Opery) umožňují překódovat text přímo na klientském počítači. Prostě si čtenář vybere kódování (je to někde v nabídce, většinou zobrazit / kódování) a zkouší různá kódování, dokud to není česky. To je relativně jednoduché. Problém je se staršími prohlížeči, jenomže ty dnes, doufám, už skoro nikdo nepoužívá.
Větší problém je s uživateli. Nemylme se -- jen mizivé procento uživatelů umí kódování přepnout, třebas je to prosté. Takže lepší je to nastavovat automaticky.
Aby nemusel čtenář mých stránek několikrát zkoušet a přepínat, aby
zjistil, v jakém kódování to mám, umisťuji do hlavičky stránek jeden meta tag:
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-2">
nebo: <meta http-equiv="Content-Type" content="text/html;
charset=windows-1250">
Říká to, že stránka je psána v tom kterém kódování. Prohlížeč to pochopí jako ekvivalent http hlavičky a text nabídne v onom kódování.
Zadávání tohoto tagu nabízejí některé editory automaticky (například dobře nastavený FrontPage 2000: Tools / Web Settings / Language / Default HTML Encoding).
Pozor, fatální problémy nastupují, pokud do toho tagu napíšete špatný kód. Pak si česky nepřečte nikdo (někde to pak nejde přepnout) a je to mnohem horší, než tam nenapsat nic.
Pokud server i klient používají http protokol 1.1 a na serveru běží program pro automatickou změnu kódu, není třeba se starat vůbec o nic. Je-li tomu tak, ví zpravidla správce serveru.
Nejlépe to šlape na serverech Apache, pokud je tam doinstalován modul češtiny. Nejoblíbenější alternativní program pro jiné servery je SaCzech [sáček] od Pavla Satrapy, který využívá CGI.
Zjistil jsem, že takový program je možné využívat, pokud publikujete stránky například na serveru www.volny.cz.
Klient zašle serveru požadavek zároveň se seznamem různých kódování,
která akceptuje. Sever stránku do nějakého takového převede a pošle je
klientovi. Připojí do hlavičky text
text/html; charset=windows-1250
, třeba. Klient pak už ví.
Drobné problémy nastávají při ukládání v cache pamětech nebo na offline prohlížení. Serverově upravené stránky totiž podle mé zkušenosti nejsou ukládány.
Pokud server používá automatické překódování a zároveň uvádíte do hlavičky meta tag content-type, může nastat velký problém, protože meta deklarace bude vlastně dvojí, což prohlížeč zmate. V tom případě nastává rozsypaný čaj. Takže se buďto ujistěte, že na serveru nic takového neběží, nebo meta hlavičku raději nezadávejte. Co mi o tom napsal Jirka Kosek:
"Problém je v tom, že ... SaCzech neumí odstraňovat meta tag poté, co provede překódování. Umí to třeba csacek."
Nevím přesně, jak hledat české texty v zahraničních prohledávačích. Vím ale, že jsou s tím problémy, protože ty stroje nezajímá kódování. Jde pak o to, v jakém kódování bude uživatel zadávat dotaz. (Obecně se dá říci, že zahraniční roboti zobrazují v ISO, čeští roboti častěji ve windows-1250.) Proto doporučuji zadávat meta tagy keywords a description alternativně bez diakritiky. Vyskytne-li se v klíčovém slově š, ž nebo ť, zadejte je třikrát, jednou podle windows, jednou podle ISO a jednou bez háčků. A možná i název stránky (tag title) kvůli vyhledávačům odčeštěte, ale to je sporné.
Unicode kódování UTF-8 je další použitelné kódování, zajímavé zejména tím, že obsahuje všechny znaky všech abeced. Jeho čas pravděpodobně teprve přijde, protože zatím není většinou softwaru podporován (prohlížeče jej ale zvládají).
České znaky nahrazuje Unicode dvojicí bajtů (namísto jednoho jako jiná kódování), takže když se na text podíváte na disk nahrubo, uvidíte místo jednoho znaku znaky dva (nějaké klikyháky).
Když se z formuláře předávají data a vyskytne se tam čeština, prohlížeč to překóduje na "URL encoded" tvar. Před každý znak dá procento a pak hexadecimálně zapíše dvěma znaky index českého písmene.
%9A = š, %9E = ž, %E1 = á, %E8 = č, %E9 = é, %EC = ě, %ED = í, %F2 = ň, %F3 = ó, %F8 = ř, %F9 = ů, %FD = ý
Na tohle jsem přišel. Nevím, zda to odpovídá win nebo iso, berte to s rezervou.
URL encoded češtinu zde zmiňuji jenom proto, že na ní náhodou někdy můžete narazit, tak abyste byli alespoň trochu v obraze.
Existuje způsob, jak některé české diakritizované znaky zobrazit v prohlížeči bez ohledu na kódování. Vkládají se pomocí &; entit; například "a s čárkou" se píše "á". Pokud jsem napsal, že to jde jenom pro některé znaky, pak jsem tím myslel znaky s čárkou. Háček se mi tímto způsobem nikdy vykouzlit nepovedlo. Takže je to prakticky nepoužitelné.
Sybolický zápis | Co je nad písmenem ? | Příklad | Zobrazení příkladu |
---|---|---|---|
&?tilde; | vlnovka | ñ | ñ |
&?circ; | stříška | ê | ê |
&?uml; | dvě tečky | ä | ä |
&?acute; | čárka | í | í |
&?grave; | opačná čárka | à | à |
&?ring; | kolečko, kroužek | å | å |
&?slash | přeškrtnuté písmeno | ø | ø |
Vcelku vynikající HTML editory jsou nepoužitelné pro české texty, protože všechny české diakritikované znaky (ve wysiwyg módu) se pokoušejí překódovat na tyto symboly. Neumím to nikde vypnout ani nastavit (ačkoli na to dostávám nefunkční návody). To je v českém textu poněkud nešikovné. (Budu přesnější -- je to na pěst!) Navíc u háčkovaných znaků dělají editory chyby, protože se všechny snaží nahradit entitami. Takže například namísto znaku ř se zadává znak ø (ø). Pavel Satrapa k tomu dodává zajímavý poznatek :
>... Dlužno podotknout, že mnozí WWW klienti ve stejném prostředí dělají tutéž chybu, ovšem zrcadlově obrácenou (tedy ø nezobrazují jako ø, ale jako ř). Negativní důsledky se navzájem vyruší, a uživatel uvidí stránku v původní podobě. To se však týká jen uživatelů se "správně špatnými" klienty, což je hodně slabá náplast.(P. Satrapa: Web design. Neokortex 1997, str 37.)
Těmi klienty, kteří dělají zrcadlovou chybu, myslí Satrapa asi Netscape Navigator 3.
Netscapovský Composer dělá tu samou chybu, ale dá se vypnout v nabídce
Options - Document Encoding a zde si už vyberete windows-1250 (ISO 8859-2 to
neumí :-(
Doporučuji poté dát Set default, ať to nemusíte nastavovat vždycky znova.
Pak je dobré dát si do šablony onen "český" meta
tag. ,
Vcelku pěkný a funkční prohlížeč Opera 5.0 má zásadní vadu. Jde o to, že nedokáže přepínat kódování. Ve windows vše zobrazuje pouze ve windows-1250 (to je tím, že pro tento charset jsou udělány windowsácké fonty - nevím, jak je tomu na jiných OS). Navíc i text ve windows-1250 zobrazuje někdy špatně - to když není deklarován font * CE.
Jak nastavit v Opeře kódování, aby to alespoň windows-1250 zobrazovalo česky: file - preferences - dokument - user font and colors. Pro "normal" vybrat (těmi třemi tečkami) font třeba Times, důležitá je spodní nabídka, kde se vybere "středoevropský". Vlastnosti "normalu" se pravděpodobně dědí na veškerý text.
Pokud píšete ve windows 1250 a máte ve zvyku začínat soubor deklarací <!doctype html ...> (to se má), tak se to v Mozille zobrazí nečesky. Je pak potřeba připsat poněkud nestandardní řádek:
<?xml version="1.0" encoding="windows-1250"
?>
Využívám toho, že Mozilla podporuje XML. Dlužno připomenout, že s takto označenými html soubory mohou mít problémy XML parsery. Čili je dobré upravit html dokument do XHTML, aby odpovídal standardu XML.
Pokud potřebujete překódovat soubory z jednoho kódování do jiného, výborně vám poslouží program Konvertor, který je volně ke stažení na http://www.walkman.cz/konvertor.html. Díky patří Pavlu Strnadovi.
Funguje to jak v FP Expressu, tak ve FP 2000.
Převedení stránky z windows-1250 do ISO 8859-2: V nabídce Soubor zvolte Vlastnosti stránky (File - Properties). Zvolte v položce Uložení této stránky místo volby středoevropský volbu středoevropský (ISO 8859-2). V položce Zobrazení této stránky ponechte původní volbu.
Protože jsem tvor windowsácký (nemůžu za to), nemám zkušenosti s jinými platformami. Pište mi, prosím, poznatky o tom, jak se zobrazuje čeština na Unixu, Linuxu a Macích.
Další: Přehled
chybných zobrazení češtiny
Vizte též: Kódovací tabulky, Formátovací chyby, Meta
tagy, Editory, Rozdíly kódování
Odkaz jinam: Přehled
kódování na Češtině.cz, poněkud preciznější, místy tomu nerozumím
Obsah
Hledání
Základní kurs
Editory
HTML tipy
Provoz webu
CSS styly
Jak psát web:
http://dusan.pc-slany.cz/internet/
Píše Yuhů: autorova stránka, mail: dusan@pc-slany.cz
Poslední aktualizace 01.02.2002