ASCII, ANSI, UTF-8… – o kodowaniu znaków

Jak komputer przechowuje znaki?

Warto na początku przypomnieć, że komputer przechowuje wszystkie dane jako bity (zero lub jeden). I tak w dużej mierze działa kodowanie znaków – danemu znaku przypada jakaś liczba:

ZnakReprezentacja binarna
A01000001
B01000010
C01000011
D01000100
Fragment tabeli ASCII

Pierwszy standard kodowania – ASCII (17 czerwca 1963)

W 1963 roku powstał pierwszy standard kodowania American Standard Code for Information InterchangeASCII. Początkowo wykorzystywał 7 bitów (127 możliwości), żeby później (pod nazwą Extended ASCII) być rozszerzonym do 8 bitów (256 możliwości). Niestety to rozszerzenie dalej nie pokryło wielu znaków (w tym części polskich liter dialektycznych).

Unicode (pierwsza wersja w 1991)

Nie jest to kodowanie a raczej standard mówiący za pomocą jakich liczb (code point) kodowane są znaki. Zawiera on ponad milion znaków, co obejmuje prehistoryczne, dzisiejsze i pozwala na dodanie nowych.

Kodowania oparte o standard Unicode

UTF-32

Jest to kodowanie pokrywające wszystkie znaki standardu Unicode. Niestety, ale do każdego znaku wykorzystywane są aż 32 bity (cztery bajty), co znacząco zwiększa rozmiar przesyłanych (lub utrwalanych) danych.

UTF-16

Jest to kodowanie o zmiennej długości elementów – używa od 16 do 32 bitów w zależności od potrzeb. Posiada specjalny znacznik, dzięki któremu jest w stanie określić czy to już koniec znaku czy też nie.

UTF-8

Podobnie jak UTF-16, jest to kodowanie o zmiennej długości elementów – w tym przypadku używa od 8 do 16 bitów w zależności od potrzeb. I także posiada specjalny znacznik, dzięki któremu jest w stanie określić czy to już koniec znaku czy też nie.

ANSI

ANSI nie jest kodowaniem, jest to raczej instytucja standaryzująca między innymi skład asfaltu (oczywiście zajmuje się też standaryzacją kodowania) 🙂 Lecz niekiedy można spotkać się z określeniem – kodowanie ANSI (na przykład w Notepad++). Najczęściej jest to po prostu odwołanie do standardowej dla systemu operacyjnego strony kodowej (standard code page on a system), czyli de facto kodowania.

Warto zajrzeć

1. https://kunststube.net/encoding/
2. https://stackoverflow.com/questions/701882/what-is-ansi-format