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>