RSS

Literki a sprawa polska

Liczba odsłon: 80

Na początku było ASCII. No, niezupełnie na początku. Standard ustanowiony przez ANSI w latach 60. ubiegłego wieku stanowił jednak podstawę, na której każdy producent komputerów i systemów informatycznych mógł budować własne rozwiązania nie martwiąc się, że przenoszenie danych będzie wymagało skomplikowanego ich tłumaczenia.

Choć jeszcze długo po zdefiniowaniu standardu ASCII producenci różnych komputerów próbowali forsować własne rozwiązania (przykładem może być firma Commodore i jej rodzina komputerów domowych), to najważniejsi wytwórcy przyjęli ASCII i dostosowali je do własnych maszyn. Ponieważ standard określał tylko 128 kodów, a komputery szybko zaczęły operować wewnętrznie 8-bitowymi bajtami, całych 128 kombinacji kodów stało się dostępnych do wykorzystania przez sprzęt i oprogramowanie w sposób dowolny — bez naruszania standardu. Dodatkowo niektóre z niskich kodów – zarezerowowane na potrzeby kodów sterujących wydrukiem – nie miały zastosowania w przypadku monitorów ekranowych i również zostały przeznaczone na znaki specjalne.

W ten sposób powstał problem obfitości: każdy chciał zagospodarować blisko 150 dodatkowych kodów w najbardziej pasujący mu sposób. Ludziom nauki potrzebne były symbole matematyczne, alfabet grecki i proste symbole graficzne umożliwiające tworzenie równań, macierzy i wzorów. Nielicznym jeszcze użytkownikom komputerów mieszkającym w Europie Zachodniej niezbędne były ich własne znaki akcentowane, umożliwiające pisanie tekstów w językach narodowych. Przeciętni anglojęzyczni użytkownicy życzyli sobie z kolei wyłącznie różnorodnych ramek i symboli, aby ich programy były schludne i czytelne.

Dostępnych kodów było sporo, lecz nie aż tyle, by potrzeby wszystkich grup użytkowników mogły zostać zaspokojone. Trzeba przyznać, że zrobiono w tym celu wiele. Zyskujący w oszałamiającym tempie na popularności standard PC (ustanowiony przez koncern IBM) łączył symbole różnego typu, prawie co do jednego wykorzystując dostępne kody. W zestawie znaków IBM PC znalazły się symbole karciane, różnego rodzaju strzałki, komplet pojedynczych i podwójnych ramek, sporo europejskich znaków narodowych i prawie trzydzieści symboli przydatnych naukowcom. Dla każdego coś dobrego i choć niektórzy musieli sięgać po narzędzia pracujące w trybie graficznym, by operować wszystkimi potrzebnymi symbolami, „pecet” spełniał – jeżeli chodzi o zapis tekstu – potrzeby olbrzymiej większości przeciętnych użytkowników domowych i biurowych.

Nie polskich, niestety. Niespodziewana eksplozja komputeryzacji w naszym kraju postawiła przed użytkownikami różnorodnych maszyn problem „nauczenia” ich polskich znaków diakrytycznych. W przypadku wielu komputerów domowych nie było to żadnym problemem. Niektóre, takie jak ZX Spectrum, fabrycznie dysponowały możliwością określenia kształtu kilku własnych znaków; w innych można było zmienić nawet cały zestaw znaków, pod warunkiem skopiowania i zmodyfikowania standardowych matryc. Większym problemem zazwyczaj była dostępność dodatkowych znaków z klawiatury, w nielicznych tylko modelach komputerów wyposażonej w klawisze zmieniaczy typu Control czy Alt.

Największy jednak kłopot stanowił dobór kodów, pod jakimi miały pojawić się polskie znaki. Nie można było mówić o jakimkolwiek uniwersalnym standardzie, ponieważ komputery nie zawsze stosowały wewnętrznie standard ASCII. Poza tym wiele kodów znaków odpowiadało wewnętrznie tokenom języka BASIC: ich użycie mogło uniemożliwić normalne działanie interpretera. Konieczność zapewnienia wygodnego wprowadzania znaków z klawiatury narzucała też rozwiązania polegające na wykorzystaniu zbędnych Polakom znaków: funta, dolara, nawiasów klamrowych czy niektórych znaków graficznych. W efekcie powstało całe mnóstwo różnych standardów, po kilka dla każdego modelu komputera. Każdy autor programu na własną rękę implementował polskie znaki na ekranie, klawiaturze i drukarce. O swobodnej wymianie danych nie mogło być mowy.

Przed jeszcze bardziej dokuczliwym problemem stanęli użytkownicy nielicznych, drogich i eksluzywnych, coraz szerzej jednak dostępnych i zawsze fascynujących komputerów klasy PC. Standard PC przewidywał zaszycie generatora znaków w bloku pamięci stałej karty graficznej — bez możliwości programowego wprowadzenia modyfikacji. Najprostszym rozwiązaniem było oczywiście przejście w tryb graficzny i rysowanie znaków wedle dowolnego przyporządkowania kodów, nawet bez ograniczenia 255 możliwych do jednoczesnego wyświetlenia symboli, płaciło się jednak za to udogonienie wielokrotnym spadkiem wydajności. Ci, którzy nie godzili się na to i zdecydowali się na przeprogramowanie układu EPROM zawierającego matryce znaków, na wieczność (lub przynajmniej do momentu kolejnej wymiany układu scalonego) wiązali się z jednym konkretnym „standardem” kodowania polskich znaków. Oczywiście co program — to inny „standard”.

Na szczęście bardzo szybko ze wszystkich stosowanych rozwiązań na placu boju pozostało tylko kilka, z liderem w postaci standardu Mazovia. Opracowany z myślą o komputerze o tej samej nazwie (który, nota bene, okazał się absolutnym fiaskiem), standard Mazovia był doskonale przystosowany do potrzeb polskiego użytkownika komputera PC:

Choć inne rozwiązania miały również swoje zalety (ich autorzy często argumentowali na przykład, że Mazovia – w przeciwieństwie do ich rozwiązań – nie zapewnia właściwej kolejności sortowania polskich znaków ani stałego odstępu kodowego między wielkimi i małymi polskimi literami), szybko przekroczona została masa krytyczna zmodyfikowanego sprzętu i zainstalowanego oprogramowania. Po raz kolejny okazało się, że lepszy jest marny standard, niż żaden. Malutki rynek ogłoszeniowy kilku czasopism informatycznych zalały reklamy zakładów oferujących przeprogramowywanie generatorów znaków popularnych kart graficznych i drukarek mozaikowych, a kolumny redakcyjne tych wydawnictw zasypane zostały konkurencyjnymi, coraz oszczędniejszymi i sprytniejszymi programami rezydentnymi umożliwiającymi wprowadzanie polskich znaków z klawiatury. Dominacja Mazovii stała się faktem.

Niedługo potem doszło jednak do trzech wydarzeń, które na zawsze przesądziły o losie Mazovii jako powszechnie obowiązującego sposobu zapisu polskich znaków. Pierwszym z nich było wprowadzenie i upowszechnienie kart graficznych VGA, dysponujących możliwością programowej zmiany matryc znaków. Z możliwości tej zaczęły korzystać szybko nowe wersje systemu MS-DOS, umożliwiając wybór zestawu znaków odpowiadającego użytkownikowi — tak zwanej strony kodowej (ang. code page). Coś, co długo było problemem samym w sobie – uzyskanie polskich znaków na ekranie, wprowadzenie ich z klawiatury, prawidłowe sformatowanie liczb i dat oraz uwzględniające akcenty sortowanie napisów – nagle stało się standardową funkcją systemu operacyjnego: wystarczyło z niej skorzystać.

Drugim wydarzeniem była konferencja budapesztańska, poświęcona rozwojowi informatyki w Europie Środkowej i Wschodniej. Konferencja ta zgromadziła czołowych producentów sprzętu i oprogramowania z całego świata, nie zaproszono jednak przedstawicieli zainteresowanych krajów: producenci postanowili narzucić własne, jak najekonomiczniejsze rozwiązania. W efekcie Mazovia otrzymała śmiertelny cios, przegrywając w pojedynku ze stroną kodową 852, stanowiącą pewnego rodzaju środkowoeuropejskie getto językowe: w jednym zestawie zgromadzono znaki większości krajów regionu, rezygnując z większości semigrafiki oraz ze wszystkich znaków alfabetów zachodnioeuropejskich i symboli specjalnych. Powodem była oczywiście oszczędność, po co bowiem umieszczać w drukarce pojemny układ ROM zawierający po jednym zestawie znaków dla każdego z krajów europejskich, skorow wszystkie można „załatwić” jednym alfabetem.

Trzecim wydarzeniem było upowszechnienie systemu Microsoft Windows 3.0 — najpierw w wersji anglojęzycznej (rozbudowywanej o polskie znaki we własnym zakresie przez polskich użytkowników), później w wersji 3.1 CEE (Central and Eastern Europe), a na koniec w całkowicie spolszczonej wersji 3.1 PL. System Windows od dawna stosował wewnętrznie stronę kodową niezgodną z CP437 (oryginalną stroną kodową komputerów IBM PC), nie było zatem możliwe proste przeniesienie istniejących standardów, bazujących przecież na CP437 i jej pochodnych. Firma Microsoft postanowiła oprzeć się na międzynarodowym standardzie ISO-8859, dokonując w nim kilku drobnych, lecz w przyszłości dokuczliwych zmian. Ze względu na specyfikę Windows, wszystkie aplikacje musiały korzystać wewnętrznie z narzuconego standardu — choć oczywiście w wymianie danych mogły stosować dowolne reguły.

Podstawowym skutkiem tych trzech wydarzeń był początek końca kodu Mazovii. Producenci sprzętu – przede wszystkim drukarek – zastosowali w swoich urządzeniach stronę kodową 852. Ten sam standard zaczął obowiązywać w systemie MS-DOS oraz wszystkich jego aplikacjach (szczególnie w pojawiających się powoli polskich wersjach językowych wielu światowych bestsellerów). Spadające ceny kart VGA pozwoliły upowszechnić polskie znaki w standardzie CP852 — Mazovia wciąż wymagała modyfikacji sprzętu lub stosowania specjalnych programów, nie była bowiem uwzględniona w systemie DOS. Z kolei użytkownicy Windows stosowali wewnętrznie kod CP1250, z rzadka tylko zapisując i odczytując pliki w „oficjalnym” kodowaniu CP852.

Żeby było śmiesznie, polski rząd postanowił rozprawić się z bałaganem, wprowadzając – na mocy Polskiej Normy – jako oficjalny... jeszcze inny standard. Obowiązującym sposobem kodowania polskich znaków stała się norma ISO-8859-2, obowiązująca co prawda w świecie systemu Unix i zbliżona do rozwiązania stosowanego w Windows, nijak się jednak nie mająca tak do powszchnego wciąż wtedy kodu Mazovii, jak i do narzuconego nam kodowania CP852. Ruch ten wywołał wielkie poruszenie w polskim światku informatycznym, choć nie było już o co walczyć: standardy – ten oficjalny i ten de facto – już powstały.

Powolny upadek systemu MS-DOS i masowa migracja w kierunku Windows powodowały, że strona kodowa 852 liczyła się w coraz mniejszym stopniu, choć wciąż obowiązywała każdego, kto zrezygnował z pracy w środowisku graficznym by użyć jakiegoś potrzebnego mu narzędzia tekstowego. Kto wie, czy standard przemysłowy CP1250 nie zadomowiłby się na dobre w polskich komputerach, gdyby nie starcie światów, wywołane rewolucją internetową.

W rodzącym się polskim internetowym światku karty rozdawali administratorzy i naukowcy, przywykli do egzotycznych z punktu widzenia przeciętnego użytkownika uniksowych stacji roboczych. Tworzenie elektronicznych wiadomości pocztowych, prowadzenie internetowych pogaduszek czy wreszcie edycja prymitywnych jeszcze, lecz już fascynujących stron WWW — wszystkie te zadania obsługiwały głównie serwery i stacje uniksowe, z „okienkową” gawiedzią oddelegowaną wyłącznie do roli biernego obserwatora. Nic dziwnego, że faktycznym standardem polskiego internetu stała się jednak Polska Norma, a więc kod ISO-8859-2. Nawet programy pisane dla środowiska Windows musiały się „nauczyć” uniksowego kodowania; do tego czasu każdy użytkownik Windows próbujący napisać coś po polsku narażał się na drwiny ze strony widzących „krzaczki” użytkowników Uniksa.

W końcu nawet firma Microsoft przyznała się do porażki. Początkowo forsująca własne, nie do końca zgodne z ISO rozwiązanie, w pewnym momencie zapewniła swoim użytkownikom możliwość wyboru kodu ISO-8859-2 jako opcji, a później — ustanowiła go podstawowym wyborem. I choć nadal wewnętrzna praca Windows oparta była o stronę kodową 1250, wiadomości dla świata były kodowanie zgodnie z Polską Normą.

Być może byłoby tak już zawsze, gdyby nie premiera systemu Windows NT. Zastosowano w nim nowy standard Unicode, którego celem było usunięcie problemu różnych, zawsze ze sobą niezgodnych stron kodowych, usiłujących zmieścić w liczącej 256 pozycji przestrzeni kodowej jak najwięcej znaków potrzebnych ograniczonej grupie użytkowników. Unikod miał być inny. Rezygnacja z – dotychczas uważanego za naturalne i niezmienne – ośmiobitowego kodowania znaków i przeznaczenie 16 bitów na opis każdej litery dawały przeszło 65 000 możliwych kodów — wystarczająco dużo, by zakodować większość używanych liter. Choć wkrótce okazało się, że faktycznie pełny opis wszystkich alfabetów świata wymaga jeszcze szerszego zakresu, Unikod pozwolił – przynajmniej chwilowo – odetchnąć od dusznej ciasnoty ASCII i jego 8-bitowych rozszerzeń.

Z Unikodem w oryginalnej postaci UCS-2 – przeznaczającej 2 bajty danych na każdy znak tekstu – związany był jednak bardzo poważny problem: standard ten praktycznie nie nadawał się do przesyłania danych poprzez Internet. Nie dość, że zapisany w nim tekst zajmował już na starcie dwukrotnie więcej miejsca, to jeszcze obfitość bajtów zerowych powodowała problemy z właściwą interpretacją danych przez przystosowane do 8-bitowych stron kodowych oprogramowanie. Wprowadzana jako kolejna odmiana UCS-4 – wymagająca czterech bajtów na znak – była pod tym względem jeszcze gorsza. Na szczęście sami twórcy standardu byli tego świadomi i przygotowali wersję Unikodu przystosowaną do standardów internetowych i realiów Internetu, w którym alfabet łaciński gra pierwsze skrzypce.

Standard Unicode Transformation Format 8 – w skrócie UTF-8 – otworzył Unikodowi świat Internetu. Zamiast marnować połowę miejsca na zbędne przy znakach łacińskich dopełnienia do 16 bitów i sprawiać sobie problemy z bajtami zerowymi, zastosowano prosty mechanizm kompresji: każdy znak składa się ze zmiennej liczby bajtów (od jednego do sześciu), a informacja o właściwej liczbie bajtów jest zapisana w zarezerwowanych bitach o największej wadze. Można się tylko zachwycić zaletami tego standardu:

Jedyną faktyczną wadą jest większa rozrzutność UTF-8 podczas zapisywania tekstów zawierających wiele znaków o wysokich kodach w alfabecie Unicode. Na przykład plik z tekstem w języku japońskim będzie w kodzie UTF-8 o 30% obszerniejszy, niż w przypadku UCS-2. W przypadku języków europejskich UTF-8 będzie już jednak oszczędniejszy od swojego dwubajtowego starszego brata (choć bardziej rozrzutny, niż specjalizowane, 8-bitowe strony kodowe).

Największą zaletą UTF-8 jest to, że rozwiązuje problem stron kodowych w sposób globalny. Dobrze zrealizowany serwis internetowy wykorzystujący UTF-8 na każdym etapie działania może w każdej chwili obsłużyć użytkowników piszących po chińsku, tajsku lub arabsku — bez konieczności wybierania zestawów znaków. Uniwersalność daje też możliwość mieszania wielu języków i alfabetów w jednym pliku — coś, co kiedyś wymagało przygotowywania specjalistycznych stron kodowych, nie zawsze rozwiązujących problem.

Obecnie w Polsce w powszechnym użyciu są następujące standardy kodowania polskich znaków:

  1. Windows Code Page 1250. Z konieczności raz ustanowiony standard ciągnie się z powodu kompatybilności aż do dzisiaj. Ze względu na politykę firmy Microsoft, wykluczającą przez długi czas obsługę Unikodu w domowych odmianach systemu Windows, większość aplikacji korzysta z tej 8-bitowej strony kodowej. Nadzieja w tym, że rosnąca popularność środowisk programistycznych oferujących wyższy poziom abstrakcji i wykorzystujących wewnętrznie Unikod (Java, C#) spowoduje wreszcie odejście CP1250 do lamusa.
  2. ISO-8859-2. Z przyzwyczajenia wciąż używany przez wielu, ciągle zresztą stanowiący Polską Normę. Nie ma już dzisiaj praktycznego powodu, dla którego ISO musi gościć na naszych komputerach i miło widzieć, jak powoli odchodzi.
  3. UTF-8. Standard ten został niedawno ustanowiony domyślnym w Usenecie — światowej sieci serwerów grup dyskusyjnych. Korzysta z niego coraz więcej serwisów internetowych, nastawionych na obsługę klientów z całego świata. Otrzymał błogosławieństwo administratorów polskich serwerów, wypierając ISO z bastionu polskich grup dyskusyjnych i serwerów pocztowych. Mieć nadzieję, że stanie się podstawą wszystkich baz danych i korzystających z nich aplikacji.

Mazovia wciąż jeszcze dogorywa, znajdując swoje miejsce w nielicznych, dawno nie aktualizowanych aplikacjach obsługujących stan magazynu lub sprzedaż. Strona kodowa 852 istnieje jedynie w tekstowym trybie pracy systemu Windows, pośrednicząc też po cichu w obsłudze polskich znaków diakrytycznych na partycjach FAT. Nawet jeśli jednak Unikodowi uda się wkrótce zastąpić je wszystkie, na placu boju pozostanie ASCII, wciąż obecne w pierwszych 128 kodach każdego chyba „żywego” kodowania świata.