Kodowanie znaków Unicode

Standard kodowania znaków Unicode to schemat kodowania znaków o stałej długości, który zawiera znaki pochodzące z niemal wszystkich języków świata.

Informacje na temat kodu Unicode można znaleźć w sekcji The Unicode Standard(Standard Unicode) oraz w serwisie WWW Unicode Consortium pod adresem www.unicode.org.

W kodzie Unicode używane są dwa formularze kodowania: 8-bitowy i 16-bitowy, w zależności od typu danych, które są kodowane. Domyślny format kodowania to 16-bitowy, gdzie każdy znak to 16 bitów (2 bajty) szerokości. Szesnasto-bitowy format kodowania jest zwykle wyświetlany jako U + hhhh, gdzie hhhh jest szesnastkowym punktem kodowym znaku. Ta forma kodowania powoduje utworzenie ponad 65 000 elementów kodu, co jest wystarczające do kodowania większości znaków głównych języków świata. Standard Unicode udostępnia również mechanizm rozszerzeń, który umożliwia kodowanie aż 1 000 000 dodatkowych znaków. Mechanizm rozszerzenia wykorzystuje parę znaków o wysokim i niskim odpowiedniku, aby zakodować jeden rozszerzony lub dodatkowy znak. Pierwszy (lub wysoki) znak surrogate ma wartość kodu między U+D800 a U + DBFF. Drugi (lub niski) znak surrogate ma wartość kodu między U+DC00 i U + DFFF.

UCS-2

Norma ISO 10646 (ISO/IEC 10646) określa uniwersalny zestaw znaków kodowanych (UCS-Universal Multiple-Octet Coded Character Set). Ten zestaw znaków zawiera 16-bitową (dwubajtową) wersję (UCS-2) i 32-bitową (czterobajtową) wersję (UCS-4). UCS-2 jest identyczny z 16-bitowym formularzem Unicode bez substytutów. UCS-2 może kodować wszystkie (16-bitowe) znaki, które są zdefiniowane w repertuarze Unicode w wersji 3.0. Dwa znaki UCS-2 -wysoka, po której następuje niska surogacja-są potrzebne do kodowania każdego nowego znaku uzupełniającego, począwszy od wersji Unicode 3.1. Te znaki dodatkowe są zdefiniowane poza oryginalną 16-bitową wersją Basic Multilingual Plane (BMP lub Plane 0).

UTF-16

ISO/IEC 10646 definiuje również technikę rozszerzenia dla kodowania niektórych znaków UCS-4 przy użyciu dwóch znaków UCS-2 . To rozszerzenie o nazwie UTF-16jest identyczne z 16-bitowym kodowaniem Unicode z surogamianami. Podsumowując, repertuar znaków UTF-16 składa się ze wszystkich znaków UCS-2 powiększonych o dodatkowe 1 000 000 znaków, które są dostępne za pośrednictwem par zastępców.

W przypadku serializowania 16-bitowych znaków Unicode w bajtach kolejność, w jakiej są wyświetlane bajty, zależy od używanego procesora. Niektóre procesory umieszczają najbardziej znaczący bajt w pozycji początkowej (znany jako big-endian order), podczas gdy inne umieszczają najmniej znaczący bajt pierwszy (znany jako kolejność little endian). Domyślnym porządkiem bajtów dla kodu Unicode jest big-endian.

UTF-8

Szesnaście bitowych znaków Unicode stanowi poważny problem dla opartych na bajtach aplikacji opartych na kodzie ASCII i systemów plików. Na przykład, aplikacje niezwiązane z obsługą Unicode mogą błędnie zinterpretować wiodące 8 bitów zerowych wielkich liter "A" (U+0041) jako jednobajtowe znaki ASCII o wartości NULL.

UTF-8 (UCS Transformation Format 8) to transformacja algorytmiczna, która przekształca znaki Unicode o stałej długości w łańcuchy bajtów w formacie ASCII o zmiennej długości. W kodach UTF-8znaki ASCII i znaki sterujące są reprezentowane przez zwykłe jednobajtowe kody, a inne znaki stają się dwoma lub większą liczbą bajtów. UTF-8 może kodować zarówno znaki nieuzupełniające, jak i znaki dodatkowe.

Znaki UTF-8 mogą mieć długość 4 bajtów. Znaki nieuzupełniające są o długości do 3 bajtów długości, a znaki dodatkowe o długości 4 bajtów.

Liczbę bajtów dla każdego znaku UTF-16 w formacie UTF-8 można określić na podstawie Tabeli 1.

Tabela 1. UTF-8 -dystrybucja bitowa
Wartość kodu

(binarny)

UTF-16

(binarny)

Pierwszy bajt

(binarny)

Drugi bajt

(binarny)

Trzeci bajt

(binarny)

Po bajcie

(binarny)

00000000

0xxxxxxx

00000000

0xxxxxxx

0xxxxxxx      
00000yyy

rrxxxxxx

00000yyy

rrxxxxxx

110yyyyy 10xxxxxx    
zzzzyyyy

rrxxxxxx

zzzzyyyy

rrxxxxxx

1110zzzz 10yyyyyy 10xxxxxx  
uuuuu

zzzzyyyy

rrxxxxxx

110110ww

wzwązka

110111yy

rrxxxxxx

11110uuu

(gdzie uuuuu = wwww+1)

10uuzzzz 10yyyyyy 10xxxxxx

W każdej z wartości kodu wymienionych w poprzedniej tabeli, serie u, w, x, y, y, i z jest to bit reprezentacji znaku. Na przykład: U+0080 transformuje się na 11000010 10000000 w formacie binarnym, a para odpowiedników U+D800 U+DC00 staje się 11110000 10010000 10000000 10000000 w formacie binarnym.