Unicode

Unicode (formalnie Unicode Standard, pol. Unikod) – komputerowy standard kodowania zestawu znaków obejmującego litery większości używanych na świecie pism, a także symboli, emoji i kodów formatowania. Standard Unicode rozwijany jest przez konsorcjum Unicode, składające się z firm wytwarzających sprzęt komputerowy, producentów oprogramowania oraz instytutów naukowych, agencji międzynarodowych i grup użytkowników. Konsorcjum współpracuje z organizacją ISO.

W odróżnieniu od standardów takich jak ISO 10646, oprócz kodowania znaków publikacje konsorcjum Unicode dostarczają również wiele szczegółów o systemach pisma i sposobie ich wyświetlania: reguły normalizacji, dekompozycji, kolacjonowania, renderowania i dwukierunkowej kolejności wyświetlania dla tekstów wielojęzycznych. Zawierają również referencyjne pliki danych i wykresy wizualne, które pomagają deweloperom poprawnie zaimplementować standard Unicode.

Architektura 
Standard Unicode definiuje przestrzeń kodową (), która jest zbiorem wartości numerycznych () od 0 do 10FFFF w systemie szesnastkowym. Wszystkie znaki Unicode zostają przypisane do jednej z wartości numerycznych przestrzeni kodowej i nazwane według wzoru U+0000, gdzie 0000 jest wartością numeryczną znaku. Zapis wartości w tym systemie musi zawierać co najmniej cztery cyfry – gdy wartość numeryczna znaku jest mniejsza, na jej początek zostają przypisane zera. Przykładowo, znak dzielenia posiada wartość numeryczną F7 i jest zapisywany jako U+00F7, natomiast znak jednego z egipskich hieroglifów o wartości numerycznej 13254 zostaje zapisany bez żadnych modyfikacji jako U+13254.

Metody kodowania 
Istnieje kilka metod zapisywania wartości numerycznych znaków Unicode jako ich bajtowe odpowiedniki w systemach komputerowych. Rozróżnia się między systemami mapowania UCS () i UTF (), które dzielą się na podgrupy zależne od ilości bajtów potrzebnej do zapisania jednego znaku.

Do najpowszechniejszych metod bajtowego kodowania znaków należą:
 UTF-32/UCS-4
 UTF-16
 UTF-8.
Mniej popularnymi kodowaniami Unicode są:
 UTF-7
 UCS-2.
Istnieją również inne kodowania, stanowiące margines lub pozostające na etapie propozycji, na przykład:
 UTF-9 i UTF-18
 UTF-EBCDIC
 UTF-6
 UTF-5.

Kompatybilność 
Standard Unicode zsynchronizowany jest ze standardem ISO 10646, stosując te same wartości numeryczne dla poszczególnych znaków. Zapis binarny tekstu ASCII jest również kompatybilny z metodą zapisu znaków Unicode UTF-8.

Nazewnictwo 
Według ogłoszonej w 2005 roku wypowiedzi Andrzeja Blikle, członka Rady Języka Polskiego na stanowisku przewodniczącego Zespołu Terminologii Informatycznej, sugeruje się używanie nazwy Unikod nie tylko jako określenie stworzonego przez konsorcjum Unicode standardu, ale również wszystkich pozostałych systemów unifikacji liter. Stosując taką definicję, Unikodem byłby również między innymi standard ISO 10646. Proponowana terminologia nie upowszechniła się jednak w sposób prawidłowy i słowo Unikod najczęściej służy jako spolszczenie słowa Unicode, a nie odrębne pojęcie w dziedzinie informatyki, prawdopodobnie przez podobieństwo obu nazw. Również sama strona internetowa konsorcjum Unicode używa Unikodu jako polskiego tłumaczenia Unicode, co w 2017 roku spotkało się z krytyką Janusza S. Bienia. Słowo Unikod nie znajduje się w Encyklopedii PWN, w przeciwieństwie do słowa Unicode. Ponieważ pierwotna wypowiedź Andrzeja Blikle stanowiła zaledwie zalecenie, dokładna definicja słowa Unikod pozostaje niejasna.

Powszechność 
Standard Unicode jest dominującym systemem kodowania znaków, a UTF-8 jego najpowszechniejszą implementacją, używany wewnętrznie w systemach operacyjnych takich jak Unix, Windows czy macOS. W roku 2020 używało go około 98% stron internetowych.

Historia standardu 
  1991 Unicode 1.0.0 (październik)
  1993 Unicode 1.1.0 (czerwiec)
  1996 Unicode 2.0.0 (lipiec)
  1998 Unicode 2.1.2 (maj)
  1998 Unicode 2.1.5 (sierpień)
  1998 Unicode 2.1.8 (grudzień)
  1999 Unicode 2.1.9 (kwiecień)
  1999 Unicode 3.0.0 (wrzesień)
  2000 Unicode 3.0.1 (sierpień)
  2001 Unicode 3.1.0 (23 marca)
  2001 Unicode 3.1.1 (sierpień)
  2002 Unicode 3.2.0 (25 marca)
  2003 Unicode 4.0.0 (17 kwietnia)
  2004 Unicode 4.0.1 (marzec)
  2005 Unicode 4.1.0 (31 marca)
  2006 Unicode 5.0.0 (4 lipca) (ogłoszenie prasowe: 18 lipca)
  2008 Unicode 5.1.0 (15 marca) (ogłoszenie prasowe: 4 kwietnia)
  2009 Unicode 5.2.0 (1 października)
  2010 Unicode 6.0.0 (11 października), m. in. start standaryzacji emoji
  2012 Unicode 6.1.0 (31 stycznia)
  2012 Unicode 6.2.0 (26 września)
  2013 Unicode 6.3.0 (30 września)
  2014 Unicode 7.0 (16 czerwca)
  2015 Unicode 8.0 (17 czerwca)
  2016 Unicode 9.0 (czerwiec)
  2017 Unicode 10.0 (czerwiec)
  2018 Unicode 11.0 (czerwiec)
  2019 Unicode 12.0 (5 marca)
  2019 Unicode 12.1 (7 maja)
  2020 Unicode 13.0 (10 marca)
 2021 Unicode 14.0 (wrzesień)

Relacje do UCS 
 Unicode 1.1 ISO/IEC ≈ 10646-1:1993
 Unicode 3.0 ISO/IEC ≈ 10646-1:2000
 Unicode 3.2 ISO/IEC ≈ 10646-2:2001
 Unicode 4.0 ISO/IEC ≈ 10646:2003
 Unicode 5.0 ISO/IEC ≈ 10646:2003/Amd.2:2006
 Unicode 5.1 ISO/IEC ≈ 10646:2003/Amd.4:2008
 Unicode 5.2 ISO/IEC ≈ 10646:2003/Amd.6:2009
 Unicode 6.0 ISO/IEC ≈ 10646:2010
 Unicode 6.1 ISO/IEC ≈ 10646:2012

Wstawianie znaków Unicode 

Klawiatura komputerowa udostępnia tylko znaki ze strony kodowej właściwej dla ustawionego języka klawiatury. W przypadku polskiej klawiatury będzie to strona kodowa CP852 i Windows-1250 (kodowanie polskich znaków). Wszystkie znaki z tych stron można wprowadzić za pomocą alt-kodów. Do wprowadzania znaków niedostępnych przez alt-kody można użyć jednej z poniższych metod:
 W systemie Windows NT, Mac OS X (od wersji 10.2) oraz w licznych dystrybucjach Linuksa (ze środowiskiem graficznym) dostępna jest tablica znaków, w której można wyszukać potrzebny znak, skopiować go do schowka, a następnie wkleić w program. W systemach Windows 95, 98 i ME tablica znaków nie daje dostępu do wszystkich znaków Unicode.
 Znając numer pozycji znaku (czy to dziesiętny, czy to szesnastkowy), można wprowadzić ten znak na kilka sposobów (nie wszystkie programy obsługują wszystkie opisane tu sposoby):
 Trzymając naciśnięty (lewy)  i wpisując z klawiatury numerycznej numer dziesiętny tego znaku, po czym zwolnić klawisz .
 Wpisać numer szesnastkowy tego znaku, a następnie wcisnąć kombinację (lewy) . Przed numerem szesnastkowym nie może być cyfra ani litera z zakresu a–f (gdyż zostaną uznane jako część kodu, ewentualnie należy poprzedzić kod np. spacją lub uzupełnić kod wiodącymi zerami, tak by liczył dokładnie sześć pozycji).
 Trzymając naciśnięty (lewy) , nacisnąć klawisz plus, wpisać numer szesnastkowy znaku, po czym zwolnić klawisz . Metoda ta działa w systemie Windows XP i nowszych.
 Trzymając naciśnięte klawisze , wpisać numer szesnastkowy znaku, a następnie puścić klawisze. Metoda ta działa w środowisku GNOME. Od wersji GTK+ 2.10 należy nacisnąć , wprowadzić kod szesnastkowy znaku, nacisnąć .

Istnieją też programy do tworzenia własnych układów klawiatur, dzięki nim można podpiąć dowolny znak Unicode pod dowolną kombinację klawiszy (najczęściej wykorzystywana jest kombinacja , gdzie AltGr to prawy klawisz ). Niektóre programy dla Windows pozwalają jedynie na wprowadzanie z klawiatury znaków istniejących w stronie kodowej właściwej dla języka klawiatury, np. w przypadku polskiego systemu Windows próba wpisania kombinacją  znaku nieistniejącego w stronie kodowej Windows-1250 nie da oczekiwanego efektu.

Zobacz też 
 alt-kody

Przypisy

Linki zewnętrzne 
 Konsorcjum Unicode – oficjalna strona Unicode
 Konsorcjum Unicode – tablice kodowe znaków
 Tablica znaków Unicode – numerycznie dziesiętna
 DecodeUnicode – baza wiki znaków Unicode
 Unicode Technical Report #36 – aspekty bezpieczeństwa związane z programowaniem Unicode
 Unikod.Pl – polska witryna o Unikodzie