ISO, ASCII, UNICODE – kodowanie znaków

wpis w: Tworzenie stron | 22

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.

Szukasz animatora?

Dziarski Lisek

  • animacje 2D i 3D
  • video explainer
  • whiteboard

Daj się zapamiętać!

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++.

22 Odpowiedzi

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

  2. 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

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

  4. Czy mi się wydaje czy storna co jakiś czas przestaje działać
    ?

  5. Chcę tylko zwrócić uwagę, że Linux NIE jest systemem operacyjym, a jadrem systemu.
    Dzieki za artykul, przydal sie

  6. No, no… dziękować, dziękować.

  7. A czy jest opcja wstawienia pustego znaku (nie spacji) w unicode?

  8. Johny11finger

    Pisze się p.S.S, nie P.S2
    Super poradnik , dzięki wielkie 🙂

  9. Ja również dziękuję, bardzo pomocne info 🙂

  10. Jak za pomocą UNICODE wpisać 10 w jednej komórce?

  11. No mega pomocne! Bardzo Ci dziękuję za ten artykuł i zrozumiałe wyjaśnienia! ♥♥♥

  12. Bardzo dobry artykuł, dziękuję. 🙂

  13. Niby wszystko jasne a jednak brakuje trochę informacji. W sumie nadal nie wiem jak rozwiązać problem konwersji tekstu z 3 różnych źródeł w jednym pliku tekstowym. Windows+OS Mac+Internet w jednym pliku oglądanym pod Windowsem i zawsze wychodzą krzaki. Jak wysądować z jakiego źródła jakie kodowanie lub jak konwertować do Windowsów.

  14. Ogólnie wpis ciekawy aczkolwiek dane dotyczące ilości łącznej znaków w Unicode są niepoprawne. Już ponad 130 tys. znaków, czyli o ponad 20 tys. więcej niż opisane jest w artykule.

    Pozdrawiam, Mateusz

  15. Ile trzeba się naszukać, żeby znaleźć, że “ę” zapisujemy jako Ä™

  16. Wszytsko super, bajka extra, tylko autor zapomniał dac prostego przykładu użycia. Innymi słowy: pełno nikomu niepotrzebnych mądrości pierdu pierdu, tyle że problemu żadnego to nie rozwiązuje.

  17. A jak kodujemy spację w UTF-8?

  18. A jak się przyjrzy ilości języków programowania i konieczności współpracy z innymi językami to głowa może rozboleć. Kto to wszystko ogarnia powinni dostać nagrody nobla bo są geniuszami.

  19. Thank you for registering - it was incredible and pleasant all the best ladonna 460598

    Rock, cedar falls

Zostaw Komentarz