Diakritika na HTML stránkách.
Pokud hledáte rychlé řešení problému češtiny na svých stránkách, přeskočte dolů na automatické meta nastavení. 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.
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 - Unicode - URL encoded - Speciální znaky - 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 bez háčků a čárek 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 vznikla různé konvence, 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, ISO Latin 2. Microsoft jej nazývá takto: "Středoevropské jazyky (ISO)".
Windows-1250 je preferováno na Windowsech. Jeho obliba na webových stránkách roste zejména kvůli tomu, že jej většina editorů na Windowsech používá jako základní kódování, např. FrontPage (tam se dá přepnout), HomeSite nebo Notepad (poznámkový blok). V Microsoftích programech se kódování windows-1250 označuje jako "Středoevropské jazyky" bez přívlastku, což je od Microsoftu samozřejmě srabárna a matení.
Další kódování jako kód bratří Kamenických, Mac, PC Latin 2 nebo čeština pro Dos se dnes již na webu užívají tak zřídka, že jim nyní nebudu věnovat pozornost.
Zápis UTF-8 je nejčastějším zápisem kódování Unicode. Unicode je narozdíl od výše zmíněných kódování určeno pro všechny světové jazyky najednou. Jde o nejmodernější technologii. Všeobecná podpora Unicode je teprve hudbou budoucnosti, ale už se začínají objevovat stránky kódované v UTF-8. UTF-8 je dobře podporovaný v prohlížečích (ale zatím o něm nepíšu).
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 -- š, ž, ť, Š, Ž, Ť (a také blbne slovenské měkké ľ). Pro zájemce jsem napsal rozdíly kódování mezi ISO a WIN pro zapisování s altem a číslem (osobně to dost často používám).
Notepad (nejjednodušší texťák, ve kterém se to nedá přepnout) 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 těch 6 znaků pomocí altu s čísly.
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 Microsoft, 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 emailech a 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í". Windows-1250 bylo později standardizováno také, ale všeobecně se těší menší podpoře standardních systémů.
Jsou různé způsoby, jak na systému Windows pracovat v kódování iso-8859-2 .
Fajn, máme tady několik různých kódování. Text stránky 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:
Aby se v prohlížeče u uživatele čeština správně zobrazila, 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">
nebo pro moderní kódování UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Ří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í.
Zmíněný meta tag je potřeba mít na začátku hlavičky dokumentu, ještě před titulkem (tagem <title>). Pokud by titulek obsahoval čárkovaná písmenka, a meta tag by byl až za ním, mohlo by v Internet Exploreru dojít k tomu, že se stránka prostě nezobrazí.
Zadávání tohoto meta tagu nabízejí některé editory automaticky (například dobře nastavený FrontPage 2000: Tools / Web Settings / Language / Default HTML Encoding).
Dejte pozor na zápis těchto meta tagů. Hodně často se chybuje v uvozovkách, střednících a lomítkách. Na velikosti písmen by ale záležet nemělo.
Pokud stránka neobsahuje meta tag nebo nedorazí se serverovou hlavičkou o kódování, umožňují prohlížeče 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 tu 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 přidávat meta tag.
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 ModCzech. 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 (platilo to v roce 2002, teď nevím).
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 deklarace kódování 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."
Na serverech, kde běží ModCzech (jiný častý modul na kódování češtiny), se soubory s meta tagem content type vůbec nedokážou odeslat a hlásí to chybu zero content size.
Unicode 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í).
Unicode se dá zapisovat různými způsoby:
České znaky tedy nahrazuje Unicode dvojicí bajtů (namísto jednoho jako jiná kódování), takže když se na text podíváte na disk nahrubo třeba hexovým editorem, uvidíte místo jednoho českého znaku znaky dva (nějaké klikyháky).
Meta tag pro nastavení UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Malá rekapitulace pojmů:
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. Kód písmene můžete zjistit tak, že si ho napíšete do nějakého formuláře (zkontrolovat kódování), odešlete a kouknete se do adresy, co se s tím písmenem stalo.
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. V javascriptu se dá odpálit pomocí funkce unescape(), podobně v jiných jazycích
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 | ø | ø |
Vizte též entity v html, asi všechny použitelné HTML entity. Všechny české znaky se dají zapsat pomocí číselné entity, to doporučuji dělat ale jenom v nouzi.
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 ø (ø).
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.
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.volny.cz/drd/konvertor/download.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.
Jak psát web píše Yuhů, Dušan Janovský. Kontakt. Poslední aktualizace 13. února 2005.