Nahlédněte i do Diskuse pod čarou!
Z hlediska problematiky kódování češtiny na Internetu jsou ze standardu MIME nejdůležitější tato pole v hlavičce elektronického dopisu nebo v úvodu HTTP protokolu:
Cíl řádného značení podle MIME je zřejmý - adresát musí být schopen informaci ze zprávy vyluštit bez ohledu na to, jakou formou byla v Internetu přenášena. Naprostá většina programů pro Internet se standardu MIME drží, v čem tedy je problém?
Content-type: typ/podtyp; charset=znaková_sada
- Udává formát obsahu dokumentu - v případě dopisů je to nejčastěji
text/plain
, na WWW paktext/html
, umí však specifikovat i obrázky, zvuky ap. (např.image/gif
,image/jpeg
ap.) - a dále název znakové sady obsažené (textové) informace.Content-transfer-encoding: typ_přenosového_kódu
- Udává, zda je informace přenášena sedmibitově (
7bit
), osmibitově s členěním na řádky (8bit
) nebo bez tohoto členění jako proud osmibitových dat (binary
), nebo říká, že se informace sice přenášena na sedmi bitech, ale že její vlastní obsah všech osm bitů obsahuje (quoted-printable
nebobase64
, podle způsobu přepisu osmibitových znaků na sedmibitové - blíže zde).- Pro HTTP není způsob přenosu již tak zajímavý, jako pro elektronickou poštu, protože HTTP je osmibitově prostupný bez problémů. (Starší SMTP servery však nikoli - viz Jak odesílat české dopisy.)
Content-language: označení_jazyka
- Tahle hlavička říká, v jakém jazyce je stránka psána. Níže naleznete informaci o označení češtiny (není totiž jednoznačné, jako obvykle).
Accept-language: označení_oblíbených_jazyků
- V této řádce může klientský program požádat o nějaký konkrétní jazyk, nebo sdělit serveru seznam svých preferovaných jazyků (vč. udání pořadí). Níže naleznete informaci o označení češtiny (není totiž jednoznačné, jako obvykle). A ještě níže naleznete popis možnosti, jak tuto hlavičku využít i pro označení oblíbené znakové sady, pokud klientský program nedovoluje nastavit
Accept-charset
.- Přesná syntaxe tohoto pokynu však může být poměrně složitá, např:
říká: "Nejradši bych to česky, pak slovensky, ze 70 % bych tomu rozuměl i anglicky, no a nepůjde-li jinak, spokojím se snad i s němčinou." (Všimněte si, že se ani pořadí preferovanosti nemusí shodovat s pořadím v seznamu.)Accept-language: cz, sk;q=0.9, de;q=0.3, en;q=0.7
Accept-charset: označení_oblíbených_znakových_sad
- Touto hlavičkou může opět klientský program žádat o určité kódování nebo opět předat seznam kódování, která umí rozluštit. Na tuto hlavičku reagují většinou moduly nebo CGI-skripty překládající WWW stránky pro klienta za letu.
- Opět je možná stejně složitá prosba jako v
Accept-language
.
US-ASCII
(moc s češtinou nepomůže)
ISO-8859-x
, kde x
je číslo od 1 do 9
Všechna další kódování, která se mohou používat v MIME, musí být zaregistrována u IANA (pro soukromé účely lze použít i neregistrované kódování, ovšem s povinnou předponou x-
). Příslušnou registraci, obsahující všechny registrované alternativy jmen, najdete také u popisu každého kódování ve zdejším seznamu kódování. Pokud je to jen trochu možné, používejte:
US-ASCII
(neobsahuje žádné české znaky)
ISO-8859-2
(Doporučuji ze všech nejvíce! Čtěte úvahu níže.)
cp852
(=PC Latin 2)
windows-1250
apple-ce
, ale nevím, zda je řádně registrováno; objevuje se rovněž x-mac-ce
(neregistrováno)
CSN_369103
(=KOI8-ČS, neužívá se snad už vůbec nikde)
windows-1250
se bohužel zdá získávat hlavní podíl na českých WWW stránkách.) V zásadě je takové chování korektní - každý si přece může přečíst definici daného kódování a naučit se ho číst. Tento postup však nutí klienty i
servery k přidávání nových a nových kódování, ačkoli ta, která už umějí, pro přenášení češtiny postačují.
Domnívám se, že výhodnost situace, kdy by byla v celém českém Internetu používána jedna znaková sada, je zřejmá - servery WWW stránek by nemusely provádět žádná přizpůsobovací opatření "za letu" ani plýtvat diskové kapacity několika verzemi těchže dokumentů, v elektronické poště by mohl každý uživatel bez obav používat
háčkovanou češtinu a toto by platilo i o elektronických konferencích ap. Nechci být špatně pochopen - respektuji rozdílné standardy jednotlivých platforem osobních počítačů (windows-1250
v případě Windows, apple-ce
v případě Macintoshe, kódování bří. Kamenických v případě DOSu), chtěl bych jen, aby všechny
informace na Internetu (a především ve veřejné doméně) používaly standard jen jeden. V praxi je tento požadavek
řešitelný poměrně snadno - všechny uživatelské komunikační programy budou vybaveny převodními tabulkami z vlastního
kódování do "kódování sítě" a naopak. Většina současných programů tyto převody provádí tak jako tak.
Chtěl bych tímto apelovat jak na výrobce komunikačních programů, tak na jejich uživatele, aby se snažili
zbytečnému tříštění standardů pro dílčí platformy zamezit a usilovali o jednotné kódování, které vyhovuje všem.
Takové kódování totiž už dávno existuje. Je jím ISO-8859-2
.
Norma HTTP, která charakterizuje řádky Content-language
a Accept-language
, se nijak blíže nevěnuje tomu, jak jazyk pojmenovat. Může zde být libovolný řetězec. Jestliže má však pole Accept-language
umožnit klientu požádat o nějakou mutaci stránky, musí server logicky tuto mutaci nazývat stejně (a podobně s Content-language
).
Např. Netscape uživateli při konfiguraci oblíbených jazyků nabízí řetězce typu English [en]
, British English [en-GB]
, Deutsch [de]
. Dvoupísmenná zkratka přitom obvykle pro určení jazyka stačí a předpokládám, že ji server vyhledává v řetězci přednostně.
Pro češtinu je normou ISO 639 dána dvoupísmenná zkratka "cs
". Například modul p. Lampy však doporučuje pro označení češtiny zkratku "cz
". (Zřejmě došlo k záměně s kódem České republiky, který je podle normy ISO 3166 skutečně "CZ
", píše se však velkými písmeny a nehovoří o jazyce.)
Jak jsem již říkal, stačí jedna řádka v konfiguraci a budou fungovat obě zkratky, přesto se domnívám, že "cs
" je normou větší a snad i více používanou a bylo by dobře držet se spíše jí. (Ostatně novější verze prohlížečů češtinu ve svých předvolbách pod zkratkou "cs
" již nabízejí.)
Zajímavou možností určení kódování je rozšíření názvu jazyka (především v požadavku od klienta - "chci to česky v Kamenických"). Jen velmi málo prohlížečů totiž dovoluje nastavit volbu Accept-charset
, ale mnohé dovolují i ruční nastavení Accept-language
.
Zavádění tohoto způsobu požadavku o konkrétní znakovou sadu však v současné době nedoporučuji, domnívám se, že je vhodnější počkat, až se užívání Accept-charset
rozšíří. Nechcete-li čekat, čtěte dále.
Podle informace Vladimíra Solnického existuje standardizovaný způsob, jak název jazyka pro tento účel "zpotvořit":
jj [ "_" ZZ [ "." kód ] ]
- jj
- označení jazyka (pro češtinu doporučuji
cs
, viz výše)- ZZ
- označení země (pro Českou republiky
CZ
)- kód
- název znakové sady, v níž je dokument napsán (doporučuji název podle MIME)
Neumím posoudit, jak moc je tento způsob standardní, nevím ani, v jaké normě se objevil, pokud vůbec v nějaké. HP-UX 10.x používá pro češtinu např. označení cz_CZ.iso88592
, což porušuje oblíbený kód jazyka cs
a rovněž MIME název znakové sady ISO-8859-2
. Netscape 2.0 pro Maca se zase liší v konvenci oddělovače kódu jazyka a země (používá en-GB
pro angličtinu). Czech plug-in Ladislava Popova zase reaguje na označení typu Czech/CP1250[cz]
. Takže je vidět, že zbytečnému zmatku se nevyhneme ani zde.
Na závěr tedy ještě jedno doporučení (moje osobní, ale bude-li nás víc, ... :-), jak Accept-charset
pro češtinu zapisovat:
cs-MIME-název
(krátká podoba)
Czech/název-kódování [cs-MIME-název]
(podoba s popisem)
Diskuse pod čarou je vám k dispozici - prozraďte, co je vám a vašim programům nejbližší, ať se o tom ví a lze tuto cestu používat co nejefektivněji, než konečně zmizí do propadliště dějin, smetena rozšířením hlavičky Accept-charset
.
od 5. 6. 1997