However, the definition associated with MIME character set name must fully specify the mapping to be performed from octets to characters. IN PARTICULAR, USE OF EXTERNAL PROFILING INFORMATION TO DETERMINE THE EXACT MAPPING IS NOT PERMITTED.To pomeni, da uporabnik v nastavitvah svojega bralnika sicer lahko izbira med raznimi oblikami in velikostmi pisav, ne bi pa smel imeti možnosti, da ročno preklopi nabor znakov (npr. če je MIME tip dokumenta ISO Latin 1, uporabnik ne sme imeti možnosti izbrati nabora Windows-1250). V tej točki Netscape Navigator krši standard.
Poleg tega osnovnega URLja lahko objavimo tudi alternative, če imamo možnost objaviti več kazalcev, ni pa sprejemljivo objaviti le npr. ISO Latin 2 ali Windows-1250 različice.
Pri sklicevanju med dokumenti (v linkih) poskušamo ohraniti izbrani nabor znakov, tako se npr. iz ISO Latin 2 dokumenta sklicujemo na ISO Latin 2 različico drugih dokumentov, če te obstajajo, sicer se sklicujemo na ISO Latin 1 različico.
Ker nabor znakov ISO Latin 1 ne vsebuje šumnikov, jih lahko pišemo le kot c s z (ali npr.: "c "s "z oz. *c *s *z). Varianta ISO646-YU (~{`) v ta namen ni sprejemljiva, saj ni podmnožica ISO Latin 1 in krši izjavo strežnika, da gre za ISO Latin 1 dokument (znaki ~{`^[@ v US-ASCII in v ISO Latin 1 so ločila in ne črke).
Standard določa takole:
Legal values for the charset parameter of the MIME HTML type are:To pomeni, da je najbolj splošno uporabna varianta za slovenščino (poleg ISO Latin 1 ali njegove 7-bitne US-ASCII podmnožice) nabor ISO-8859-2 (t.j. ISO Latin 2 -- ta ni enak naboru MS Windows Latin 2 !). ISO Latin 2 vsebuje vse potrebne šumnike za slovenščino.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.
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 strežniku ne smemo dopustiti, da bi lažno trdil, da gre za ISO Latin 1, v resnici pa bi uporabili v dokumentu nekaj drugega.
Tule je preglednica možnih Content-Type: vrstic v HTTP glavi, ki bi lahko prišle v poštev za slovenščino:
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)
Tako na primer veljajo naslednje standardne preslikave iz končnice imena datoteke v Content-Type: :
.html text/html .txt text/plain .gif image/gif .mp2 audio/x-mpeg
Za rešitev problema slovenskih šumnikov 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 podpičjem ni obvezen, zato ga lahko mirno opustimo in si morda prihranimo kakšno nevšečnost v boju s sintakso pri vpisovanju dodatne preslikave v konfiguracijsko datoteko strežnika.
Če imamo večino .html datotek že pripravljenih v naboru ISO Latin 2, bi se lahko odločili tudi za alternativno varianto, kjer bi imeli dokumenti s končnico .html privzet nabor znakov ISO Latin 2, končnico .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
Končnice imen datotek so poljubne (znotraj omejitev računalnikovega datotečnega sistema); ko pa jih izberemo, moramo te končnice tudi uporabiti v imenih datotek, ki jih ta strežnik ponuja.
Izbira končnice imena ne vpliva na bralnike, saj ti upoštevajo le MIME tip dokumenta, ignorirajo pa njegovo ime, zato ni treba skrbeti niti avtorju niti bralcem, da bi različne končnice imena datoteke lahko zmedle bralnik.
Če datotečni sistem omejuje končnico imena datoteke na tri velike črke, 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 strežniki, ne bi pa smelo biti težko najti načina za dodajanje novih preslikav.
Primeri:
AddType .html-l2 text/html;charset=ISO-8859-2 8bit 1.0in po potrebi še 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
AddType text/html;charset=ISO-8859-2 .html-l2
AddType text/html;charset=ISO-8859-2 html-l2
suffix .html-l2 text/html;charset=ISO-8859-2 8BIT 1.0
Po spremembi konfiguracijskih datotek je verjetno treba strežnik na to opozoriti ali ga pognati znova. Sistem Windows NT je treba zagnati na novo.
Odslej bodo vse datoteke, ki se končajo na .html-l2, opremljene s HTTP headerjem Content-Type: text/html;charset=ISO-8859-2, vse tiste, ki se končajo na .html, pa bodo še naprej opremljene s Content-Type: text/html, kar implicira ISO Latin 1 nabor znakov.
Namesto da izpiše:
Content-Type: text/htmlmora izpisati:
Content-Type: text/html; charset=ISO-8859-2kadar na primer pošilja dokument v naboru ISO Latin 2.
Dva primera CGI programa za sprotno pretvorbo med nabori znakov:
Mimogrede naj omenim še en problem z dokumentom, ki se vsakokrat predela skozi CGI skript -- cache takih dokumentov noče hraniti, zato dostop do njih vedno zahteva zvezo z oddaljenim strežnikom, kar bolj obremenjuje omrežje in je počasno za uporabnika. Kljub nekoliko večji potrati diska na strežniku, so statični dokumenti s tega stališča prijetnejši za uporabnika.
Pokazali smo tudi dve varianti, kako lahko na strani strežnika zagotovimo, da bodo dokumenti opremljeni z ustrezno Content-Type glavo -- za statične in za dinamične dokumente. Opisani metodi sta preprosti in ilustrativni, nikakor pa ne edini možni.
desetiška osmiška | desetiška osmiška znak koda koda | znak koda koda ----------------------+---------------------- č 232 350 | Č 200 310 (ch) š 185 271 | Š 169 251 (sh) ž 190 276 | Ž 174 256 (zh) ć 230 346 | Ć 198 306 (cj) đ 240 360 | Đ 208 320 (dj)
Več o ISO Latin naborih znakov se nahaja na: http://www.cs.tu-berlin.de/user/czyborra/charsets/
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.htmlUporabimo lahko tudi program sumniki avtorja Branka Drevenška. 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 črke v HTML dokumentih? (David Vrtin); tam so tudi navodila za nastavitev urejevalnika emacs za delo z Latin 2.