Jeśli jesteś właścicielem tej strony, możesz wyłączyć reklamę poniżej zmieniając pakiet na PRO lub VIP w panelu naszego hostingu już od 4zł!

Dlaczego prawidłowe ustawienia są istotne i w jaki sposób nieprawidłowe ustawienia utrudniają życie innym

Z wielu powodów technicznych, podyktowanych zaszłościami historycznymi, istnieje bardzo wiele sposobów kodowania polskich liter. Do tego z tych samych powodów kody znaków z różnych zestawów języków, tzw. stron kodowych, pokrywają się. Można to porównać do numerów telefonicznych – podając komuś z zagranicy lub spotkanego na wakacjach numer telefonu możesz go wprowadzić w błąd, jeśli równocześnie nie podasz miasta (lub numeru kierunkowego), w którym ten telefon się znajduje. Stąd niezbędna jest taka konfiguracja czytnika, by w wysyłanych listach nie tylko polskie litery były prawidłowo zakodowane (odpowiednik wystukania poprawnego numeru telefonicznego), ale i by była informacja, w jakiej stronie kodowej są one zakodowane (odpowiednik wybrania właściwego numeru kierunkowego). W przeciwnym razie czytnik odbiorcy może wyświetlić krzaki. Nawet jeżeli sam widzisz prawidłowo u siebie wszystkie polskie litery, nie oznacza to, że wszyscy tak to zobaczą. Niestety (albo stety, zależy od punktu widzenia) internet jest zjawiskiem globalnym i część czytających może mieszkać poza Polską lub z innych powodów mieć inne domyślne ustawienia kodowania stosowanego w czytanych postach. Do tego dochodzi dodatkowa sprawa internetowej normy RFC 2046 link do str. zewnętrznej, który mówi, że w wypadku braku deklaracji charsetu trzeba założyć, że treść nie zawiera żadnych znaków z ogonkami – i są takie czytniki, które się do tego stosują i w artykule zawierającym polskie litery bez deklaracji zamiast polskich liter pokazują znaki zapytania lub puste miejsca, są też takie, które zamiast polskich liter pokazują znaki zachodnioeuropejskie (odwrócony znak zapytania, dwuznak ae itp.). Należy do tego dodać jeszcze fakt, że polskie litery technicznie mogą być zakodowane w jednym z wielu kodowań: ISO­-8859-2, Windows­-1250, ISO­-8859-16, ISO­-8859-13, Windows­-1257, DOS CP852, DOS CP775, Mazovia, MacCE – wszystkie te kodowania zawierają komplet polskich znaków i są lub do niedawna były używane w różnych systemach operacyjnych i programach, do tego polskie litery zawierają liczne inne kodowania, które co prawda odeszły do lamusa, ale wciąż formalnie istnieją. Można narobić bigosu z polskimi literkami? Jak widać można… Brak deklaracji charsetu to tak, jakby na stronie www podać swój numer telefonu czy samą nazwę twojej ulicy bez informacji, w jakim mieście mieszkasz. Albo sam login, bez tej części po małpie, gdy komuś dajesz swój adres e-mail!

Na tej stronie link prowadzi do podstrony możesz sobie obejrzeć, jak polskie litery, wyglądające prawidłowo u Ciebie, mogą wyglądać u innych, gdy nie zadeklarujesz charsetu. Pamiętaj – przekazanie odbiorcy informacji o użytym kodowaniu (charsecie) jest Twoim i tylko Twoim obowiązkiem, odbiorca nie ma absolutnie żadnego obowiązku domyślać się czy zgadywać, jakiego kodowania użyłeś. Pamiętaj też, że fakt, że u Ciebie polskie litery wyglądają poprawnie, nie oznacza jeszcze, że u innych też będą wyglądać poprawnie – normalne jest, że u siebie ustawisz to samo domyślne kodowanie dla listów wysyłanych i listów czytanych, ale inni mogą albo nie mieć takiej możliwości, albo (z bardzo wielu powodów) ustawić sobie inne domyślne kodowanie. Gdy wysyłasz wiadomość nie zawierającą deklaracji charsetu, za krzaki u nich całkowitą odpowiedzialność ponosisz Ty i tylko Ty.

Już jesteś przekonany (lub przekonana) do konieczności takiej konfiguracji swojego programu, żeby w Twoich listach zawsze znalazła się deklaracja stosowanej strony kodowej, ale być może chciałbyś się dowiedzieć, z czego to tak naprawdę wynika? Oto powody tego stanu rzeczy, które starałem się opisać jak najprostszym językiem:

W internecie strony www (w tym dyskusje na forach), maile, wiadomości w komunikatorach, komunikacja przez IRC oraz posty na grupy dyskusyjne przesyłane są jako ciągi liczb. Każdy znak – czy to literka, czy to znak przestankowy, czy to spacja – jest przesyłany jako liczba z zakresów 32 – 127 i 160 – 255 (1) (dotyczy kodowań ISO­-8859-x, niektóre inne kodowania wykorzystują zakres 128–159 na znaki pisarskie, przykładem są kodowania rodziny Windows). Na przykład spacja (odstęp) ma numer 32, litera A – 65, a tylda (czyli falisty znaczek ~) ma numer 126. Z powodów historycznych ustalono sprawy w ten sposób, że znaki w zakresie 32 – 127 są przyporządkowane jednoznacznie, i są to wszystkie wielkie i małe litery alfabetu łacińskiego, część znaków przestankowych (nie ma na przykład stosowanych w poprawnej polszczyźnie cudzysłowów, nie ma myślnika ani wielokropka), cztery rodzaje nawiasów oraz parę znaków specjalnych, w tym małpa, krzyżyk, znak procenta, etka (ampersand, &) i gwiazdka. Ten zestaw znaków zwany jest US-ASCII (albo w skrócie ASCII) lub dolny zakres. Na przykład wyrażenie „jestem Marcin” wysyłane – i odbierane – jest jako „106 101 115 116 101 109 032 077 097 114 099 105 110” (spacje są tylko dla przejrzystości, w rzeczywistości numerki lecą jak leci jeden po drugim, i do tego w postaci dwójkowej).

Dla wszystkich innych znaków używanych w innych językach, w tym polskich ogonków, jest dostępnych 96 pozycji w logicznie tak zwanym górnym zakresie – jest tego zdecydowanie za mało, żeby pomieścić wszystkie litery z ogonkami, a do tego dochodzą jeszcze litery greckie, cyrylica, arabskie, hebrajskie, koreańskie, tajlandzkie i chińskie krzaczki, a ich jest kilkadziesiąt tysięcy… Dlatego zaistniała konieczność stosowania tablic kodowych, albo inaczej charsetów (skrót z angielskiego – character set, czyli zestaw znaków). Gdy czytnik napotyka w treści znak o numerze 160 (128, jeżeli obsługuje również kodowania wykorzystujące ten zakres) lub powyżej, szuka w nagłówku deklaracji charsetu, by wiedzieć, jaki znak wyświetlić. A możliwości są bardzo liczne. Na przykład numer 188 może oznaczać: ułamek zwykły ¼ (14) w ISO­-8859-1 i ISO­-8859-13, ź w ISO­-8859-2, Ľ (L z apostrofem) w Windows­-1250 i MacCE, º (o w górnym indeksie) w Mac Roman, Œ (ligatura OE) w ISO­-8859-15, ╝ (znak semigrafiki ='') w DOS CP852, ╪ (znak semigrafiki =|=) w KOI8-R, ј (serbskie j) w Windows­-1251… O ile człowiek nie miałby zwykle większego problemu z identyfikacją języka tekstu i dobraniem właściwego kodowania metodą kilku prób i błędów, to dla komputera byłaby to bardzo żmudna czynność kolejnego dopasowywania słów do posiadanego jakiegoś słownika… Komputery nie posiadają inteligencji i nie potrafią się domyślić, że chodzi o polski język, więc obciążenie systemu takim modułem zgadywania, o jaki charset chodzi, byłoby ogromne. Dlatego na logikę programów na razie nie ma co liczyć. Wbrew powszechnemu przekonaniu ISO­-8859-2 nie jest jedynym istniejącym charsetem dla języka polskiego – do niedawna był to jedyny obowiązujący w przypadku grup dyskusyjnych w hierarchii pl (czyli o nazwach zaczynających się od pl., np. pl.internet.pomoc, pl.comp.ogonki czy pl.news.czytniki), ale w innych hierarchiach (alt.*, free.* czy ztm.*) to już niekoniecznie. Do tego od pewnego czasu w hierarchii pl. została dopuszczona ograniczona możliwość stosowania kodowania UTF-8, czyli już nie można zakładać, że jak grupa ma pl. w nazwie, to na pewno polskie litery są kodowane w ISO­-8859-2. Gdy czytnik nie znajduje deklaracji charsetu w nagłówku, to może zrobić jedną z trzech rzeczy:

Jak już wspomniałem powyżej, zgodnie ze normą RFC 2046 link do str. zewnętrznej brak deklaracji charsetu jest tożsamy z deklaracją US-ASCII, czyli tak naprawdę to dwa pierwsze rodzaje zachowań są technicznie poprawne, zaś trzecie – nie. Przy okazji ta sama norma też mówi, że deklaracja ISO­-8859-1 nie powinna być używana do oznaczania charsetu listów zawierających wyłącznie znaki z US-ASCII. W OE ustawienie US-ASCII jest niemożliwe, mniejszym złem jest ustawienie kodowania właściwego dla danego języka (w przypadku polskiego – ISO­-8859-2), w Thunderbirdzie konieczna jest zmiana jednej linii konfiguracyjnej.

Równie nieprawidłowe i szkodliwe, jak brak deklaracji charsetu, jest ustawienie na siłę złego charsetu. Niewielka grupa nieświadomych lub złośliwych korespondentów „walczy” z używaniem polskich liter ustawiając na siłę charset ISO­-8859-1 lub US-ASCII i twierdząc, że skoro nie używają polskich liter, to jest to właściwy charset. Tymczasem charset jest dla całego listu, tak dla treści pisanej przez nadawcę, jak i treści cytowanej przez niego.

W zakończeniu chciałbym dodać, że podstawą internetu jest to, że pozwala on na używanie dowolnych programów działających na dowolnych platformach sprzętowych pod kontrolą dowolnych systemów operacyjnych. Stosowanie różnych dziwnych ustawień dających jakie-takie rezultaty tylko w jednym lub kilku czytnikach jest utrudnieniem życia innych, jest sprzeczne z ww. filozofią internetu i zwyczajnie świadczy o braku wiedzy, niedbalstwie lub zwyczajnie lamerstwie i buractwie kogoś stosującego te ustawienia – choćby one były domyślne…


(1) Liczby z zakresu 0÷31 i 128÷159 stanowią tzw. znaki sterujące i nie mogą być używane do przekazywania tekstu. Niektóre kodowania, np. Windows, wykorzystują zakres 128÷159 na znaki pisarskie, ale czasem stwarza to problemy.

licznik