ISO, ASCII, UNICODE – kodowanie znaków

Zdarza się, że otwierając dokumenty lub przeglądając strony zamiast polskich liter, wyświetlane są jakieś „krzaczki”. Te krzaczki mogą być spowodowane przez niewłaściwe kodowanie znaków. Ale zacznijmy od początku.

Tekst, który widzisz na ekranie, komputer przechowuje w postaci zer i jedynek, które pakowane są po osiem sztuk. Pojedyncze zero lub jedynka to bit; grupa ośmiu to bajt. Urządzenia elektroniczne przechowują informacje w postaci bajtów, w tym tekst.

No dobra, ale jak to się dzieje, że te wszystkie bity komputer potrafi przerobić na opowiadanie? Otóż każdy bajt, czyli zbiór ośmiu jedynek i zer to liczba, tylko inaczej zapisana niż jesteśmy do tego przyzwyczajeni. 00000000 to liczba zero, 00000001 to jeden, a 00000010 to nie dziesięć, lecz dwa. Dziesiątka wyglądałaby w ten sposób: 00001010. Na taki sposób zapisu liczb mówi się binarny, my natomiast nauczyliśmy się korzystać dziesiętnego.

Do tekstu ma się to w ten sposób, że do każdego znaku jest przypisana liczba. Zdanie „Ala ma kota” to zbiór liczb:

Zdanie
znak numer numer zapisany binarnie
A 65 0100 0001
l 108 0110 1100
a 97 0110 0001
(spacja) 32 0010 0000
m 109 0110 1101
a 97 0110 0001
(spacja) 32 0010 0000
k 107 0110 1011
o 111 0110 1111
t 116 0111 0100
a 97 0110 0001
. 46 0010 1110

Warto zwrócić uwagę na to, że wielkie i małe litery są dla komputera oddzielnym znakiem, a puste miejsce (spacja) też jest znakiem, chociaż niewidocznym. Do tego poszczególne cyfry są traktowane w taki sam sposób. Np. do symbolu jedynki wcale nie jest przypisana liczba 1, tylko 49.

No, ale skąd komputer wie, jaki symbol jest przypisany do danej liczby? Odpowiedzią jest kodowanie znaków. Mówiąc najogólniej – to tabela ze wszystkimi znakami i przypisanymi do nich liczbami. Na początku ery komputerów wystarczyła tablica mająca raptem 127 symboli…

ASCII

… W latach sześćdziesiątych pojawił się standard ASCII. Zawierał on 127 znaków, z czego pierwsze 32 to były znaki sterujące – Chociaż nie były one wyświetlane na ekranie lub drukowane, spełniały inne funkcje: odpowiadały za odstępy (spacje i tabulatory), informowały, kiedy zejść do nowej linii, nowej strony, czy o końcu dokumentu. Żeby zobaczyć wszystkie znaki, które są zdefiniowane w tym sposobie kodowania, można wpisać w Google: ASCII tablica znaków.

Z czasem ta liczba przestała wystarczać – komputery zyskiwały nowe zastosowania, a do tego stawały się popularniejsze w innych krajach, mających specyficzne litery. Zostały wydane dwa nowe standardy, które miały po 256 znaków, z czego pierwsze 127 było identyczne ze starym ASCII.

ISO oraz ANSI (strony kodowe)

Pierwszy z nich to wymyślony przez Microsoft i wykorzystywany w Windowsach ANSI (to jest nieoficjalna nazwa). Jego odpowiednikiem wykorzystywanym w innych jest ISO-8859. Choć oba mają zdefiniowane ponad dwieście pięćdziesiąt symboli, ta liczba jest cały czas niewystarczająca do pracy we wszystkich językach – dlatego każda rodzina języków posiadała własną wersję tych kodowań.

Zestaw znaków dla języków z Europy zachodniej: ISO-8859-1. Na różowo są zaznaczone znaki sterujące, -zielono znaki skopiowane z ASCII, a na niebioseko – nieużywane. Kolejna tabela, to kodowanie Windows-1252. Chociaż wszystkie litery są ułożone w tej samej kolejności, kodowanie od Microsoftu zawiera dodatkowe znaki.
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 Znaki kontrolne
1
2 SP ! # $ % & ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~
8 Nie używane
9
A NBSP ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ SHY ® ¯
B ° ± ² ³ ´ µ · ¸ ¹ º » ¼ ½ ¾ ¿
C À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
D Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
E à á â ã ä å æ ç è é ê ë ì í î ï
F ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ
Windows-1252
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 Znaki kontrolne
1
2x SP ! # $ % & ( ) * + , - . /
3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 @ A B C D E F G H I J K L M N O
5 P Q R S T U V W X Y Z [ \ ] ^ _
6 ` a b c d e f g h i j k l m n o
7 p q r s t u v w x y z { | } ~ ZK
8 NU ƒ ˆ Š Œ NU Ž NU
9 NU ˜ š œ NU ž Ÿ
A NBSP ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ SHY ® ¯
B ° ± ² ³ ´ µ · ¸ ¹ º » ¼ ½ ¾ ¿
C À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï
D Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
E à á â ã ä å æ ç è é ê ë ì í î ï
F ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ

Takie rozwiązanie nazywa się stroną kodową. Wspomniany już ANSI od Microsoftu występował w kilku wersjach. Wszystkie miały ten sam początek, więc zawierały interpunkcję, małe i wielkie litery angielskiego alfabetu oraz cyfry. Jednak pozostałe znaki różniły się w zależności od wersji, czyli strony kodowej.

Do obsługi języków zachodnioeuropejskich jest wersja oznaczona jako Windows-1252 (lub CP1252). Dla środkowoeuropejskich istnieje wersja Windows-1250. Oprócz tego są jeszcze inne strony kodowe wydane przez Microsoft do obsługi pozostałych języków (np. 1251- cyrylica, 932- japoński, 1256- arabski).

Podobnie rzecz ma się ze standardem ISO-8859. Dla języków Europy zachodniej istnieje strona kodowa oznaczona jako ISO-8859-1, dla środkowoeuropejskich ISO-8859-2, a kolejne numery na końcu to: Europa południowa, północna, cyrylica itd.

Jednak nawet wprowadzenie stron kodowych nie rozwiązywało wszystkich problemów. Pierwszym z nich jest zgodność pomiędzy standardami. Dokument utworzony w systemie operacyjnym Linux (używającym ISO), mógł być źle odczytany w systemie Windows (ANSI), co objawiało się różnymi krzaczkami na miejscu niektórych liter. Chociaż pierwsze 127 znaków jest takie samo dla wszystkich standardów (nawet strona kodowa dla cyrylicy ma taki sam początek jak zachodnioeuropejska), to pozostałe znaki były układane według własnego widzi-mi-się producentów.

Windows-1250 (języki środkowoeuropejskie). Następna tabela to ISO dla centralnej i środkowej Europy – zwróć uwagę na inne rozmieszczenie polskich liter.
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 Początek ten sam co w poprzednich, więc ciachnąłem.
8 NU NU NU Š Ś Ť Ž Ź
9 NU NU š ś ť ž ź
A NBSP ˇ ˘ Ł ¤ Ą ¦ § ¨ © Ş « ¬ SHY ® Ż
B ° ± ˛ ł ´ µ · ¸ ą ş » Ľ ˝ ľ ż
C Ŕ Á Â Ă Ä Ĺ Ć Ç Č É Ę Ë Ě Í Î Ď
D Đ Ń Ň Ó Ô Ő Ö × Ř Ů Ú Ű Ü Ý Ţ ß
E ŕ á â ă ä ĺ ć ç č é ę ë ě í î ď
F đ ń ň ó ô ő ö ÷ ř ů ú ű ü ý ţ ˙
ISO-8859-2
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 Znowu przyciąłem.
8 Nieużywane
9
A NBSP Ą ˘ Ł ¤ Ľ Ś § ¨ Š Ş Ť Ź SHY Ž Ż
B ° ą ˛ ł ´ ľ ś ˇ ¸ š ş ť ź ˝ ž ż
C Ŕ Á Â Ă Ä Ĺ Ć Ç Č É Ę Ë Ě Í Î Ď
D Đ Ń Ň Ó Ô Ő Ö × Ř Ů Ú Ű Ü Ý Ţ ß
E ŕ á â ă ä ĺ ć ç č é ę ë ě í î ď
F đ ń ň ó ô ő ö ÷ ř ů ú ű ü ý ţ ˙

Tak więc literką ą, która ma numer 156 w windowsowskim 1250, w ISO-8859-2 jest przypisana do liczby 182. Słowo kąt zapisane w tym pierwszym da kšt po otworzeniu w systemie, obsługującym ten drugi standard.

Kolejnym problemem jest to, że 256 znaków to ciągle za mało, aby swobodnie pisać dokumenty. W większości wypadków wystarczy, ale problemy pojawiają się, kiedy w pracy magisterskiej pisanej w języku polskim trzeba powołać się na pana Möllera, Pütza czy Straßmanna. Albo wstawić cytat pisany cyrylicą lub wpisać greckie litery do skomplikowanego wzoru matematycznego.

UNICODE

Potrzebny był nowy sposób kodowania znaków, który obejmowałby wszystkie możliwe symbole używane we wszystkich językach świata. Tak oto w 1991 oficjalnie został ogłoszony UNICODE. Początkowo zawierał on 7161 znaków, ale ta liczba ciągle rosła i obecnie wynosi 110 182. Dużo.

Od jego wprowadzenia w jednym dokumencie można używać wielu języków, wpisywać skomplikowane formuły, a do tego UNICODE jest obsługiwany przez wszystkie współczesne systemy i tak samo jak poprzednie – pierwszych 127 znaków jest identycznych z ASCII. Dzięki temu o wiele rzadziej występują problemy z krzaczkami.

Pojawił się jednak inny problem – tak wielka liczba możliwych znaków sprawiła, że do ich zapisu przestał wystarczać 1 bajt. Jeden bajt składa się z ośmiu jedynek lub zer, co pozwala ułożyć je na 256 różnych sposobów. Czyli tyle, ile symboli mają strony kodowe. Żeby zwiększyć liczbę znaków obsługiwanych przez system kodowania, trzeba zwiększyć liczbę bajtów potrzebnych do wstawienia litery.

Ostatnio dodany do unikodu znak, przedstawiający turecką Lirę ma symbol turecka lira(raczej nie jest jeszcze obsługiwany przez czcionki i programy). Numer przypisany do niego to 110 182. W systemie zero-jedynkowym (binarnym), do jego zapisania potrzebne są aż 3 bajty: 00000001 10101110 01100110. Gdyby teraz każda litera musiała zajmować po 3 bajty, nawet te z początku, którym wystarczy po jednym – zwiększyłoby się miejsce potrzebne do zapisania pliku na dysku.

Trzeba było uniknąć sytuacji, w której liczba 65 powiązana z liter A była zapisana w sposób, marnujący pamięć komputera: 00000000 00000000 0100 0001. Programiści wymyślili więc, że znaki nie muszą mieć stałej liczby bajtów. Tak powstał UTF-8. I teraz bardzo ważna rzecz: UNICODE to tylko tabelka z wypisanymi wszystkimi znakami i ich numerkami. A za to, żeby działało to na komputerze, odpowiadają kodowania. Jest wspomniany już UTF-8, UTF-16 i UTF-32.

UTF-8 jest używane w dokumentach tekstowych, na stronach internetowych, pakietach biurowych i wielu innych programach – jest najczęściej wykorzystywanym sposobem kodowania znaków z UNICODE.

kodowanie znaków

TIPS – widzisz krzaczki na stronie www?

internet explorer kodowanieJeżeli masz włączony Firefox lub IE, możesz szybko zmienić kodowanie znaków na stronie. Wciśnij na klawiaturze lewy Alt, kliknij u góry na menu Widok, a potem Zestaw znaków (Firefox) lub Kodowanie (IE). Najczęściej wykorzystywane kodowania dla polskich stron to UNICODE (UTF-8), środkowoeuropejski (Windows-1250) oraz środkowoeuropejski (ISO-8859-2). Zmień po kolei sposób kodowania znaków na każdy z tych trzech i zobacz, czy będą wyświetlane wszystkie polskie litery.

TIPS – tworzysz strony w Notatniku?

notatnik-ansiWybierz Plik | Zapisz jako i na dole sprawdź, jakie kodowanie jest użyte.
Jeżeli ANSI, to pomiędzy znacznikami <head> i </head> powinieneś wpisać: <meta http-equiv=”Content-type” content=”text/html; charset=windows-1250″>
Jeżeli UTF-8, to w sekcji <head> powinieneś wpisać: <meta http-equiv=”Content-type” content=”text/html; charset=UTF-8″>

 

PS. Zaleca się zapisać plik z kodowaniem UTF-8 i takie też wpisać do nagłówka.

PS2. Windowsowy notatnik nie obsługuje ISO-8859. Jeżeli musisz zakodować stronę w ten sposób, ściągnij darmowy i bardziej funkcjonalny Notepad++.

VN:F [1.9.22_1171]
Rating: 4.9/5 (22 votes cast)
ISO, ASCII, UNICODE - kodowanie znaków, 4.9 out of 5 based on 22 ratings

6 comments on “ISO, ASCII, UNICODE – kodowanie znaków

  1. bb on said:

    Świetny artykuł wyjaśniający aspekty związane z kodowaniem znaków w sposób bardzo przystępny.

    VA:F [1.9.22_1171]
    Rating: 5.0/5 (2 votes cast)
  2. ekename on said:

    Dobry artykuł – jasno i przystępnie wyjaśnione sprawy kodowań. Brakuje w nim tylko jednego szczegółu: wyjaśnienia różnicy, pomiędzy UTF-8, UTF-16 i UTF-32

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
  3. Mania on said:

    Jest w Unicode znak,który w tablicy ma ZC37. No i jak mogę go wpisać do tekstu w WORDZIE??? :-(
    Mania

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
  4. Czy mi się wydaje czy storna co jakiś czas przestaje działać
    ?

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

* Copy This Password *

* Type Or Paste Password Here *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>