UNICODE(7)

NAZWA
Unicode - zunifikowany 16-bitowy superzestaw znaków

OPIS
Międzynarodowy standard ISO 10646 definiuje Universal Character Set (UCS). UCS zawiera wszelkie znaki wszelkich innych zestawów znaków. Gwarantuje on również kompatybilność na okrągło, tj. budowanie takich tablic konwersji, że podczas konwersji łańcucha z jednego kodowania na UCS i z powrotem nie jest tracona żadna informacja. UCS zawiera znaki wymagane do przedstawienia prawie wszystkich znanych języków. Obejmuje to, oprócz wielu języków które używają rozszerzeń pisma łacińskiego, także następujące pisma i języki: grecki, cyrylica, hebrajski, arabski, armeński, gruziński, japoński, chiński, hiragana, katakana, koreański, hangul, devangari, bengalski, gurmukji, gujarati, tamilski, oriya, telugu, kannada, malajlamski, tajski, lao, bopomofo i pewną liczbę innych. Trwają prace nad włączeniem innych pism, jak tybetańskiego, khmerskiego, runicznego, etiopskiego, hieroglifów, różnych języków indoeuropejskich i wielu innych. Dla większości z tych drugich języków w momencie opublikowania standardu w 1993, nie było jeszcze jasnym jak można je najlepiej zakodować. Dodatkowo oprócz znaków wymaganych przez pisma, włączono także duży zestaw symboli graficznych, typograficznych, matematycznych i naukowych, dostarczanych z TeX-em, PostScriptem, MS-DOS-em, Macintoshem, Videotextem, OCR i wieloma innymi systemami przetwarzania tekstów, a także kody specjalne, gwarantujące "kompatybilność na okrągło" z wszelkimi innymi istniejącymi zestawami znaków. Standard UCS (ISO 10646) opisuje zestaw znaków o architekturze 31-bitowej. Jednakże dzisiaj tylko pierwszym 65534 pozycjom kodowania (0x000 do 0xfffd), zwane Basic Multilingual Plane (BMP), przypisano znaki, i spodziewane jest, że tylko bardzo egzotyczne znaki (np. hieroglify) do specjalnych celów naukowych otrzymają miejsce poza ową 16-bitową BMP. Znaki UCS 0x0000 do 0x007f są identyczne z tymi w klasycznym zestawie znaków US-ASCII, a znaki w zakresie 0x000 do 0x00ff są identyczne z tymi w zestawie znaków ISO 8859-1 .

ZNAKI SKŁADAJĄCE
Niektóre punkty kodowe w UCS zostały przypisane do znaków składających. Podobne są one do niespacyjnych klawiszy akcentów na maszynie do pisania. Znak składający dodaje akcent do poprzedniego znaku. Najważniejsze znaki akcentowane mają osobne kody w UCS, jednak mechanizm znaków składających pozwala dodawać akcenty i inne znaki diakrytyczne do każdego znaku. Znaki składające zawsze następują po znaku, który modyfikują. Dla przykładu, niemiecki znak A-umlaut ("Latin capital letter A with diaeresis") może być przedstawiony za pomocą bądź to istniejącego już złożonego znaku UCS o kodzie 0x00c4, bądź alternatywnie jako kombinacja zwykłych znaków "capital letter A" i "combining diaeresis": 0x0041 0x0308.

POZIOMY IMPLEMENTACJI
Ponieważ należy się spodziewać, że nie wszystkie systemy będą obsługiwać zaawansowane mechanizmy w rodzaju składania znaków, ISO 10646 określa następujące trzy poziomy implementacji UCS:

Poziom 1
    Nieobsługiwane są znaki składane i Hangul Jamo (specjalne, bardziej skomplikowane kodowanie pisma koreańskiego, w którym sylaby Hangul są kodowane jako dwa lub trzy podznaki).

Poziom 2
    Jak poziom 1, jednakże w niektórych pismach zezwala się już na niektóre znaki składające (np. hebrajski, arabski, devangari, bengalski, gurmukhi, gujarati, oriya, tamlilski, telugu, kannaga, malajlamski, tajski i lao).

Level 3
    Wszystkie znaki UCS są obsługiwane.

Standard Unicode 1.1, opublikowany przez Unicode Consortium, zawiera dokładnie UCS Basic Multilingual Plane na trzecim poziomie implementacji, jak to opisano w ISO 10646. Unicode 1.1 dodaje także niektóre definicje semantyczne pewnych znaków do definicji ISO 10646.

UNICODE W LINUKSIE
W Linuksie obecnie powinno używać się BMP tylko na pierwszym poziomie implementacji, aby uniknąć komplikacji wynikających ze znaków składanych. Wyższe poziomy implementacji są odpowiedniejsze dla specjalnych formatów przetwarzania tekstów, ale nie jako ogólny systemowy zestaw znaków. Typ w C wchar_t jest w Linuksie 16-bitową liczbą całkowitą bez znaku i jego wartości interpretowane są jako kody UCS na poziomie 1 BMP . Ustawienie locale określa czy systemowym kodowaniem znaków jest na przykład UTF-8 czy ISO 8859-1. Do transformacji wewnętrznych znaków wchar_t i łańcuchów na systemowe kodowanie znaków i na odwrót mogą zostać użyte funkcje biblioteczne w rodzaju wctomb, mbtowc, albo wprintf.

OBSZAR PRYWATNY
W BMP, kodom z zakresu 0xe000 do 0xf8ff nigdy nie zostaną przypisane znaki; są one zarezerwowane do użytku prywatnego. Dla społeczności Linuksowej ów obszar prywatny został dalej podzielony na zakres od 0xe000 do 0xefff, którego może używać indywidualnie każdy użytkownik, oraz strefę linuksową w zakresie 0xf000 do 0xf8ff, której rozszerzanie podlega koordynacji pomiędzy wszystkimi użytkownikami Linuksa. Rejestr znaków przypisanych do strefy Linuksowej utrzymuje obecnie H. Peter Anvin <Peter.Anvin@linux.org> z Yggdrasil Computing, Inc. Zawiera one niektóre znaki graficzne DEC VT100 których brakuje w Unicode, daje bezpośredni dostęp do znaków w buforze fontu konsoli i zawiera znaki używane przez kilka bardziej zaawansowanych pism, jak klingoński.

LITERATURA

*   Information technology - Universal Multiple-Octet Coded Character Set (UCS) - Part 1: Architecture and Basic Multilingual Plane. International Standard ISO 10646-1, International Organization for Standardization, Genewa, 1993. Jest to oficjalna specyfikacja UCS. Całkiem oficjalna, całkiem gruba, i całkiem droga. Co do informacji o zamówieniu, zobacz http://www.iso.ch.

*   The Unicode Standard - Worldwide Character Encoding Version 1.0. The Unicode Consortium, Addison-Wesley, Reading, MA, 1991. Dostępny jest już Unicode 1.1.4. Zmiany w stosunku do książki [opisującej] 1.0 są dostępne na ftp://ftp.unicode.org. Unicode 2.0 zostanie opublikowany w postaci książkowej w 1996.

*   S. Harbison, G. Steele. C - A Reference Manual. Fourth edition, Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3. Dobra książka-informator języka programowania C. Czwarte wydanie obejmuje także 1 Poprawkę do standardu C ISO (ISO/IEC 9899:1990) z 1994, która dodaje znaczną liczbę nowych funkcji bibliotecznych C do obsługi wielobajtowych zestawów znaków.

BŁĘDY
W czasie pisania tej strony man obsługa UCS w Linuksowej libc była daleka od kompletnej.

AUTOR
Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>

ZOBACZ TAKŻE
utf-8(7)