Ach ta čeština

Všechny dosavadní ukázky WML kódu obsahovaly český text bez diakritiky. Mohli jste proto nabýt neoprávněného dojmu, že wapové stránky nelze psát s českými znaky. Češtinu samozřejmě použít lze, ale není to tak jednoduché, jak by se mohlo zdát.

Jazyk WML vychází z XML. To jako znakovou sadu používá ISO 10646. V praxi mohou XML dokumenty obsahovat libovolný znak z libovolného jazyka používaného dnes na Zemi. V jednom dokumentu tak můžeme používat angličtinu, češtinu, ruštinu a třeba i arabštinu s korejštinou. Pro zápis znaků je potřeba použít nějaké kódování, které říká jakému znaku odpovídají jednotlivé bajty nebo sekvence bajtů uložených v souboru s XML dokumentem.

XML jako primární kódování používá kódování UTF-8. Na něm je zajímavé to, že znaky z ASCII mají stejný kód i v UTF-8. Znaky národních abeced se ukládají do proměnlivého počtu bajtů. Například znaky s českou diakritikou se ukládají do dvou bajtů. Pro editování souborů s kódováním UTF-8 proto potřebujeme speciální editor.

Specifikace jazyka WML jako kódování rovněž preferuje UTF-8. Vše se tedy zdá jednoduché, uložíme stránky s češtinou v kódování UTF-8 a bude vyhráno. Bohužel, ze zcela nepochopitelných důvodů dnešní brány mobilních operátorů a mobilní telefony kódování UTF-8 nepodporují. Při pokusu o načtení takové stránky dostaneme jen chybové hlášení.

Řešení pomocí znakových entit

První možností, jak na stránkách bez problému zobrazovat znaky s diakritikou, jsou znakové entity. Ve WML stránce můžeme použít zápis &#xkód;, kde kód je kód znaku, který chceme do stránky vložit. Kódy znaků lze zjistit např. na těchto adresách http://www.unicode.org/charts/PDF/U0080.pdf a http://www.unicode.org/charts/PDF/U0100.pdf. Stránku s větou „Příliš žluťoučký kůň úpěl ďábelské ódy.“ pak můžeme zapsat takto:

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" 
              "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
  <card title="CS pomoci entit">
    <p align="left">P&#x0159;&#x00ed;li&#x0161;
      &#x017e;lu&#x0165;ou&#x010d;k&#x00fd; k&#x016f;&#x0148;
      &#x00fa;p&#x011b;l &#x010f;&#x00e1;belsk&#x00e9; &#x00f3;dy.
    </p>
  </card>
</wml>

Vytvářet takovýmto způsobem stránky je samozřejmě dost nepohodlné. Konverzi na znakové entity za nás naštěstí může udělat program. Jeden takový jsem pro vás připravil a můžete si ho stáhnout z adresy http://www.kosek.cz/sw/convert/.

Viděli jsme, že znaky `<' a `&' mají ve WML speciální význam. První z nich uvozuje tagy WML a druhý znakové entity. Pokud chceme tyto znaky zapsat jako součást dokumentu, musíme použít jejich speciální opis – `&lt;', resp. `&amp;'.

Pohodlnější způsob bez záruky

Specifikace WML říká, že klienti mohou podporovat i další kódování než je UTF-8. Nabízí se tedy použití kódování ISO-8859-2, které se používá především na unixových systémech, ale podporují ho i některé aplikace pro Windows. Všechny telefony, které jsem měl v ruce, toto kódování zvládly. O konverzi kódování se však z principu stará brána operátora. Oba dva čeští operátoři si poradí i s kódováním obvyklým ve Windows (windows-1250).

Osobně vám tedy doporučuji stránky vytvářet v kódování ISO-8859-2. Tento způsob je funkční a vyhovuje standardům WML. Použití windows-1250 je také možné, ale WAP fórum nijak oficiálně toto kódování nepodporuje.

Jediná změna, která nás na stránkách čeká při použití těchto kódování, je správné uvedení kódu v deklaraci na začátku WML stránky:

<?xml version="1.0" encoding="iso-8859-2"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" 
              "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
  <card title="CS v iso-8859-2">
    <p align="left">Příliš žluťoučký kůň úpěl ďábelské ódy.</p>
  </card>
</wml>
© Jiří Kosek 2000-2001