ISO Latin-1 | ISO Latin-2

Resitev problema slovenskih sumnikov v HTML dokumentih

februar 1996, dopolnitve avgust, september, oktober 1996; avgust, september 1997
Mark Martinec -- mark.martinec@nsc.ijs.si

Izhodisca

Minimalne zahteve

Nabor znakov za zacetni dokument (home page)

Ker zna vsak WWW bralnik prikazati dokument v naboru ISO Latin 1 in ker ima bralnik pravico, da dokumentov v drugacnem naboru znakov sploh ne prikaze (ampak npr. ponudi shranitev na zunanjo datoteko), je edina univerzalna varianta ta, da je zacetni dokument, katerega URL je javno objavljen, kodiran v naboru ISO Latin 1.

Poleg tega osnovnega URLja lahko objavimo tudi alternative, ce imamo moznost objaviti vec kazalcev, ni pa sprejemljivo objaviti le npr. ISO Latin 2 ali Windows-1250 razlicice.

Pri sklicevanju med dokumenti (v linkih) poskusamo ohraniti izbrani nabor znakov, tako se npr. iz ISO Latin 2 dokumenta sklicujemo na ISO Latin 2 razlicico drugih dokumentov, ce te obstajajo, sicer se sklicujemo na ISO Latin 1 razlicico.

Ker nabor znakov ISO Latin 1 ne vsebuje sumnikov, jih lahko pisemo le kot c s z (ali npr.: "c "s "z oz. *c *s *z). Varianta ISO646-YU (~{`) v ta namen ni sprejemljiva, saj ni podmnozica ISO Latin 1 in krsi izjavo streznika, da gre za ISO Latin 1 dokument (znaki ~{`^[@ v US-ASCII in v ISO Latin 1 so locila in ne crke).

Dokumenti v drugih naborih znakov

Poleg osnovne (ISO Latin 1) variante dokumentov, lahko ponudimo iste dokumente kodirane tudi v drugih naborih znakov.

Standard doloca takole:

Legal values for the charset parameter of the MIME HTML type are:
charset = "US-ASCII"
        | "ISO-8859-1"  | "ISO-8859-2"        | "ISO-8859-3"
        | "ISO-8859-4"  | "ISO-8859-5"        | "ISO-8859-6"
        | "ISO-8859-7"  | "ISO-8859-8"        | "ISO-8859-9"
        | "ISO-2022-JP" | "ISO-2022-JP-2"     | "ISO-2022-KR"
        | "UNICODE-1-1" | "UNICODE-1-1-UTF-7" | "UNICODE-1-1-UTF-8"
        | token

token = 1 * <any CHAR except CTLs or tspecials>
...
Although HTTP allows an arbitrary token to be used as a charset value, any token that has a predefined value within the IANA Character Set registry must represent the character set defined by that registry. Applications should limit their use of character sets to those defined by the IANA registry.
To pomeni, da je najbolj splosno uporabna varianta za slovenscino (poleg ISO Latin 1 ali njegove 7-bitne US-ASCII podmnozice) nabor ISO-8859-2 (t.j. ISO Latin 2 -- ta ni enak naboru MS Windows Latin 2 !). ISO Latin 2 vsebuje vse potrebne sumnike za slovenscino.

Ne glede na izbrani nabor znakov (razen ISO Latin 1) je nujno, da v MIME tipu izrecno navedemo, kateri nabor znakov je uporabljen v dokumentu. HTTP strezniku ne smemo dopustiti, da bi lazno trdil, da gre za ISO Latin 1, v resnici pa bi uporabili v dokumentu nekaj drugega.

Tule je preglednica moznih Content-Type: vrstic v HTTP glavi, ki bi lahko prisle v postev za slovenscino:

Content-Type: text/html                    (implicira ISO-8859-1)
Content-Type: text/html; charset=ISO-8859-2   (ustreza standardu)
Content-Type: text/html; charset=ISO646-YU    (RFC1345)
Content-Type: text/html; charset=IBM852       (IANA)
Content-Type: text/html; charset=Windows-1250 (IANA: Windows-1250)

Realizacija

Netscape Navigator V2 ze avtomatsko preklopi nabor znakov na ISO-8859-2, ce dobi táko informacijo (MIME tip) v HTTP glavi dokumenta, Netscape Navigator V3 za Windows in Internet Explorer pa ze znata uporabiti obstojece nabore znakov (Windows-1250) in interno preslikati ISO Latin 2 vanje, tako da ni treba dodatno iskati in instalirati ISO Latin 2 fontov. S tem je glavni zadrzek glede uporabe ISO Latin 2 odpravljen in nobene potrebe ni vec po dokumentih v drugih kodnih straneh, ki so specificne za osebne racunalnike. Tudi Lynx 2-4-FM razume koncept nabora znakov (in dokumenta noce pokazati -- ponudi shranitev na disk -- ce uporabnikov terminal nima podpore za Latin 2)

Staticni dokumenti

Za staticne dokumente, ki se nahajajo na datotekah, HTTP strezniki dolocijo MIME tip dokumenta iz koncnice imena datoteke. Ta MIME tip potem posljejo bralniku kot Content-Type: vrstico v HTTP glavi dokumenta.

Tako na primer veljajo naslednje standardne preslikave iz koncnice imena datoteke v Content-Type: :

.html text/html
.txt  text/plain
.gif  image/gif
.mp2  audio/x-mpeg

Za resitev problema slovenskih sumnikov lahko tem preslikavam dodamo npr. naslednje:

.html-l2     text/html;charset=ISO-8859-2
.html-646yu  text/html;charset=ISO646-YU
.html-cp852  text/html;charset=IBM852
.html-cp1250 text/html;charset=Windows-1250

Presledek za podpicjem ni obvezen, zato ga lahko mirno opustimo in si morda prihranimo kaksno nevsecnost v boju s sintakso pri vpisovanju dodatne preslikave v konfiguracijsko datoteko streznika.

Ce imamo vecino .html datotek ze pripravljenih v naboru ISO Latin 2, bi se lahko odlocili tudi za alternativno varianto, kjer bi imeli dokumenti s koncnico .html privzet nabor znakov ISO Latin 2, koncnico .html-l1 pa bi na primer uporabili za ISO Latin 1 kodiranje:

.html        text/html;charset=ISO-8859-2
.html-l1     text/html
.html-l2     text/html;charset=ISO-8859-2

Koncnice imen datotek so poljubne (znotraj omejitev racunalnikovega datotecnega sistema); ko pa jih izberemo, moramo te koncnice tudi uporabiti v imenih datotek, ki jih ta streznik ponuja.

Izbira koncnice imena ne vpliva na bralnike, saj ti upostevajo le MIME tip dokumenta, ignorirajo pa njegovo ime, zato ni treba skrbeti niti avtorju niti bralcem, da bi razlicne koncnice imena datoteke lahko zmedle bralnik.

Ce datotecni sistem omejuje koncnico imena datoteke na tri velike crke, lahko izberemo npr.:

.L2  text/html;charset=ISO-8859-2
.646 text/html;charset=ISO646-YU
.852 text/html;charset=IBM852
.L2W text/html;charset=Windows-1250

Detajli nastavitev se razlikujejo med strezniki, ne bi pa smelo biti tezko najti nacina za dodajanje novih preslikav.

Primeri:

Za CERNov streznik:

dodamo v datoteko httpd.conf naslednjo vrstico:
AddType .html-l2     text/html;charset=ISO-8859-2 8bit 1.0
in po potrebi se npr.:
AddType .html-646yu  text/html;charset=ISO646-YU    7bit 0.8
AddType .html-cp852  text/html;charset=IBM852       8bit 0.9
AddType .html-cp1250 text/html;charset=Windows-1250 8bit 0.9

Za NCSA streznik:

dodamo v datoteko srm.conf naslednjo vrstico:
AddType text/html;charset=ISO-8859-2 .html-l2

Za Apache streznik:

dodamo v datoteko srm.conf naslednjo vrstico:
AddType text/html;charset=ISO-8859-2  html-l2

Za multithreaded HTTP streznik na OpenVMS:

v datoteko HTTP_SUFFIXES.CONF dodamo naslednjo vrstico:
suffix  .html-l2  text/html;charset=ISO-8859-2  8BIT  1.0

Za Microsoft Internet Information Server (Windows NT):

  1. vklopimo se kot Administrator
  2. pozenemo regedt32
  3. izberemo: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\
    Services\InetInfo\Parameters\MimeMap
  4. kliknemo Add Value na meniju Edit
  5. v polje Add Value vpisemo:
    text/html; charset=ISO-8859-2,html-l2,,h
  6. v polju Data Type izberemo REG_SZ in kliknemo OK
  7. polje String pustimo prazno in kliknemo OK
  8. ponovimo korake 4 do 7 in v koraku 5 vnesemo:
    text/html; charset=Windows-1250,html-cp1250,,h

Po spremembi konfiguracijskih datotek je verjetno treba streznik na to opozoriti ali ga pognati znova. Sistem Windows NT je treba zagnati na novo.

Odslej bodo vse datoteke, ki se koncajo na .html-l2, opremljene s HTTP headerjem Content-Type: text/html;charset=ISO-8859-2, vse tiste, ki se koncajo na .html, pa bodo se naprej opremljene s Content-Type: text/html, kar implicira ISO Latin 1 nabor znakov.

Dinamicni dokumenti -- CGI programi

Ce gre za dokument, ki ga vsakokrat sproti sestavi nek nas CGI program (skript), je zadeva se preprostejsa. CGI program mora vedno sam izpisati HTTP vrstico Content-Type:, zato lahko vanjo napise kar zeli oz. kar je potrebno.

Namesto da izpise:

  Content-Type: text/html
mora izpisati:
  Content-Type: text/html; charset=ISO-8859-2
kadar na primer posilja dokument v naboru ISO Latin 2.

Dva primera CGI programa za sprotno pretvorbo med nabori znakov:

Mimogrede naj omenim se en problem z dokumentom, ki se vsakokrat predela skozi CGI skript -- cache takih dokumentov noce hraniti, zato dostop do njih vedno zahteva zvezo z oddaljenim streznikom, kar bolj obremenjuje omrezje in je pocasno za uporabnika. Kljub nekoliko vecji potrati diska na strezniku, so staticni dokumenti s tega stalisca prijetnejsi za uporabnika.

Zakljucek

Pokazali smo, da pri HTML dokumentih nabor znakov ISO Latin 2 pokriva potrebe Slovenscine po sumnikih in hkrati edini ustreza mednarodnim standardom in priporocilom za HTTP protokol. Pogoj je, da streznik opremi glavo dokumenta s Content-Type: text/html;charset=ISO-8859-2 . Novejse verzije popularnih bralnikov znajo avtomatsko preklapljati med nabori znakov brez uporabnikove intervencije, hkrati pa znajo tudi preslikati nabor ISO Latin 2 v Windows-1250 na osebnih racunalnikih, tako da na strani bralca ni potreben noben dodaten trud (npr. instalacija dodatnih fontov).

Pokazali smo tudi dve varianti, kako lahko na strani streznika zagotovimo, da bodo dokumenti opremljeni z ustrezno Content-Type glavo -- za staticne in za dinamicne dokumente. Opisani metodi sta preprosti in ilustrativni, nikakor pa ne edini mozni.

Dodatki

Tabela sumnikov za ISO Latin 2

Tule je kratka tabela s kodami sumnikov. Uporabiti je treba pravi 8-bitni znak z ustrezno kodo in ne HTML entity oblike &#nnn;, saj zanj naceloma velja, da se interpretira kot Unicode koda znaka (oziroma podmnozica ISO Latin 1), ne glede na Content-Type (tega se trenutno ne drzijo vsi bralniki).
    desetiska osmiska |     desetiska osmiska
znak   koda    koda   | znak   koda    koda
----------------------+----------------------
  c    232     350    |   C    200     310     (ch)
  s    185     271    |   S    169     251     (sh)
  z    190     276    |   Z    174     256     (zh)
  c    230     346    |   C    198     306     (cj)
  d    240     360    |   D    208     320     (dj)

Vec o ISO Latin naborih znakov se nahaja na: http://www.cs.tu-berlin.de/user/czyborra/charsets/

Rocna pretvorba med nabori znakov

Da ne vzdrzujemo dokumentov loceno v vsakem naboru znakov, vzamemo lahko za original npr. tistega v ISO Latin 2 in ga s preprosto pretvorbo predelamo v njegove izpeljanke -- namesto vsakokrat sproti (kot to dela CGI skript), to naredimo le ob spremembi vsebine.

Na Unixu npr. zamenjamo ISO Latin 2 v ISO Latin 1 (csz) z ukazom:

perl -p -e 'tr/\350\271\276\346\310\251\256\306/cszcCSZC/;' \
   my-file.html-l2 >my-file.html

Na CATHY pa npr. z ukazom:

$ exe perl -p -e "tr/\350\271\276\346\310\251\256\306/cszcCSZC/;" -
   my-file.html-l2 >my-file.html
Uporabimo lahko tudi program sumniki avtorja Branka Drevenska. Program je v javni lasti, na voljo je izvorna koda v C++, in prevedene (exe/bin) verzije za Windows 95 / Windows NT, DOS, OpenVMS in druge sisteme - glej Kako uporabljati slovenske crke v HTML dokumentih? (David Vrtin); tam so tudi navodila za nastavitev urejevalnika emacs za delo z Latin 2.

Reference

Domaci dokumenti

Tuji dokumenti

Primeri uporabe opisanih konceptov

Povsod v naslednjih primerih je ohranjen koncept, da pri sklicevanju na druge dokumente (ce obstajajo v razlicnih naborih znakov) vedno vstopimo v dokument z enakim naborom znakov.