DziΩki MIME list zawieraj▒cy zdjΩcie i nagrany g│os nadawcy mo┐e zostaµ wys│any z komputera typu Macintosh, a nastΩpnie odebrany na komputerze Amiga, przy czym zar≤wno nadawca listu jak i odbiorca w og≤le nie zauwa┐▒ faktu, ┐e np. dane zawieraj▒ce obrazek zostan▒ po drodze zamienione na ci▒g literek wygl▒daj▒cych np tak:
M YP.?4)W0DI38Y0+E:JKK)50K:J2 *R$E*P0E'R5?!0^4CBH#+:PJU##Q*XP MOST"2A7+SS,1EM-Q#]05GE$SKVD O J[5K!*8^*_R1"J4IIES>@/.VWRG=+A M:>"I[+JK3_KCK/RYV#'J@C4G]B@0G#1%5A9OUPY2D!AH2I*%#: YT/'^28'&...a do tego jeszcze plik zawieraj▒cy d╝wiΩk zosta│ zmieniony w "miΩdzyczasie" z formatu stosowanego na jednym komputerze na format stosowany na drugim.
I w│a╢nie na tym polega MIME - jest to niejako uniwersalny jΩzyk, co╢ jak ╢redniowieczna │acina czy obecnie jΩzyk angielski. Zamiast uczyµ siΩ dziesi▒tek r≤┐nych jΩzyk≤w (czytaj - zamiast przystosowywaµ programy do dziesi▒tek r≤┐nych standard≤w), wystarczy nauczyµ siΩ tego jednego jΩzyka, ┐eby m≤c siΩ porozumieµ ze wszystkimi (czytaj - ┐eby m≤c zrozumieµ dane wys│ane z komputera stosuj▒cego lokalnie dowolny standard).
Zasadniczo format MIME opiera siΩ na formacie stosowanym od zamierzch│ych czas≤w w sieci Internet w poczcie. Format ten opisany jest w RFC822, a polega w skr≤cie na tym, ┐e na pocz▒tku dokumentu znajduje siΩ tzw. nag│≤wek, kt≤rego poszczeg≤lne linijki zawieraj▒ r≤┐ne informacje, takie jak nadawca listu, data jego wys│ania, tytu│, etc...
A oto przyk│ad takiego nag│≤wka:
Path: galaxy.uci.agh.edu.pl!uw.edu.pl!news.nask.pl!usenet From: Hubert JanczakJak widaµ ka┐da linijka nag│≤wka zawiera s│owo kluczowe zako±czone dwukropkiem (From:, Subject:, etc...), okre╢laj▒ce co zawiera dana linijka, oraz w│a╢ciwe dane (adres nadawcy, tytu│...).Newsgroups: pl.comp.ogonki,pl.comp.www,pl.comp.sys.pc-unix.linux Subject: Re: Znowu te cholerne ogonki... Date: Wed, 17 Jul 1996 14:39:30 +0200 Lines: 19
Koniec nag│≤wka oznaczany jest przez pust▒ linijkΩ, pozosta│a czΩ╢µ dokumentu zawiera jego w│a╢ciw▒ tre╢µ.
W nag│≤wku, w╢r≤d wielu informacji, mo┐e w szczeg≤lno╢ci pojawiµ siΩ taka linijka:
MIME-Version: 1.0Oznacza to, ┐e dokument jest zgodny ze standardem MIME (1.0 oznacza numer wersji - jak na razie istnieje tylko jedna wersja tego standardu, w│a╢nie 1.0). W przypadku pojawienia siΩ takiej linijki, pojawiaj▒ siΩ najczΩ╢ciej tak┐e dwie dodatkowe. Pierwsza z nich to:
Content-type:Linijka taka okre╢la zawarto╢µ pliku, oraz - co bardzo wa┐ne - zestaw znak≤w stosowanych w tym pliku (je┐eli jest to plik tekstowy). Zawarto╢µ pliku jest okre╢lana przez parΩ s│≤w kluczowych - pierwsze okre╢la typ, czyli np. tekst, grafika, d╝wiΩk, drugie s│owo podaje konkretny format (np. text/plain - czyli zwyk│y tekst, text/html - tekst w formacie HTML, image/jpg - obrazek w formacie JPeg, itp...).
Zestaw znak≤w okre╢la siΩ po ╢redniku, pisz▒c charset=xxx. Og≤lnie, najczΩ╢ciej wystΩpuj▒cym i interesuj▒cym dla nas przypadkiem jest:
Content-type: text/plain; charset=ISO-8859-2Oznacza to czysty tekst, ze znakami ze standardu ISO-8859-2, kt≤ry to zawiera znaki stosowane w Europie ╢rodkowej i wschodniej (za wyj▒tkiem cyrylicy), w szczeg≤lno╢ci litery polskie, czeskie, s│owackie, wΩgierskie itp...
Druga informacja wystΩpuj▒ca bardzo czΩsto w nag│≤wku MIME, to:
Content-transfer-encoding:Okre╢la ona w jaki spos≤b przesy│ane s▒ znaki o kodach >127. Jest to o tyle wa┐ne, ┐e pocz▒tkowo Internet nie by│o mo┐liwo╢ci przesy│ania znak≤w o kodach >127, dlatego wiele program≤w ci▒gle nie pr≤buje przesy│aµ takich znak≤w. Dlatego czΩsto zachodzi konieczno╢µ specjalnego zakodowania znak≤w z tzw. g≤rnej po│≤wki zestawu znak≤w za pomoc▒ znak≤w z dolnej czΩ╢ci, czyli ze standardowego ASCII.
Zasadniczo stosowane s▒ dwa sposoby kodowania:
Content-transfer-encoding: quoted-printableStosuje siΩ go tam, gdzie dane zawieraj▒ niewiele znak≤w spoza standardowego ASCII, czyli np. w│a╢nie do przesy│ania tekst≤w z polskimi znakami. Znaki o kodach wiΩkszych ni┐ 127 s▒ zamieniane na trzy znaki. Najpierw jest znak r≤wno╢ci a potem dwie liczby heksadecymalne tworz▒ce liczbΩ szesnastkow▒ odpowiadaj▒c▒ kodowi znaku. Przyk│adowo znak ≤, zapisywany w standardzie ISO-8859-2 jako 243, zostanie przes│any jako ci▒g znak≤w =F3 (liczba 243 to F3 szesnastkowo). Dodatkowo znak r≤wno╢ci jest zapisywany jako =3D (3D to szesnastkowy kod znaku '=' wg standardu ASCII).
W kodowaniu tym stosowane jest jeszcze kilka dodatkowych regu│, szczeg≤│y we wspomnianym ju┐ RFC1521.
Drugi spos≤b kodowania, stosowany raczej do plik≤w binarnych (grafika, d╝wiΩk), ale mo┐liwy do zastosowania tak┐e dla zwyk│ego tekstu, to:
Content-transfer-encoding: base64Dane przeznaczone do zakodowania standardem `base64' s▒ grupowane po trzy bajty, a nastΩpnie ka┐da z takich tr≤jek jest dzielona na cztery liczby 6-bitowe. Z kolei liczby 6-bitowe zapisywane s▒ w prosty spos≤b - 0 to A, 1 to B, ..., 25 - Z, 26 - a, 27 - b, ..., 51 - z, 52 - 0, 53 - 1, ..., 61 - 9, 62 - +, 63 - / Powstaje ci▒g znak≤w - liter, cyfr i znak≤w + i /. Taki ci▒g jest jeszcze tylko dzielony na wiersze i powstaje co╢ zupe│nie nieczytelnego dla cz│owieka, ale za to │atwe do przes│ania przez praktycznie ka┐dy program rozumiej▒cy MIME. Ten spos≤b kodowania tak┐e jest opisany dok│adnie w RFC1521.
Trzecim sposobem przes│ania znak≤w o kodzach >127, najprostszym z mo┐liwych, jest po prostu wys│anie ich w postaci 8-bitowej. List zawiera wtedy w nag│≤wku informacjΩ:
Content-transfer-encoding: 8bita dane tak zapisane nie wymagaj▒ ┐adnej konwersji.
M≤wi▒c w du┐ym skr≤cie, fragment zawieraj▒cy znaki ze specjalnego zestawu znak≤w (np. ISO-8859-2) zapisywany jest w formacie:
=?charset?encoding?encoded_text?=gdzie:
Mo┐na tak┐e obejrzeµ inny dokument o MIME.
Piotr Pi▒tkowski, <kompas@uci.agh.edu.pl>