unicode(7) Miscellaneous Information Manual unicode(7)
NAZWA
unicode - zunifikowany zestaw znakow
OPIS
Miedzynarodowy standard ISO/IEC 10646 definiuje miedzynarodowy zestaw
znakow - Universal Character Set (UCS). UCS zawiera wszelkie znaki
wszelkich innych zestawow znakow. Gwarantuje on rowniez kompatybilnosc
na okraglo, tj. budowanie takich tablic konwersji, ze podczas konwersji
lancucha z jednego kodowania na UCS i z powrotem nie jest tracona zadna
informacja.
UCS zawiera znaki wymagane do przedstawienia praktycznie wszystkich
znanych jezykow. Obejmuje to nie tylko pismo lacinskie, greckie,
hebrajskie, arabskie, armenskie, gruzinskie i cyrylice, lecz takze
ideogramy chinskie, japonskie oraz koreanskie Han, jak rowniez
nastepujace: hiragana, katakana, hangul, dewanagari, bengalskie,
gurmukji, gujarati, oriya, tamil, telugu, kannada, malajlamski, tajski,
lao, kmerski, bopomofo, tybetanski, runiczne, etiopskie, kanadyjskie
sylabiczne, cherokee, mongolskie, oghamskie, myanmar, sinhala, thaana,
yi i inne. Nad pismami, ktore nie zostaly jeszcze uwzglednione, trwaja
prace nad najlepszym ich zakodowaniem do uzytku komputerowego i
ostatecznie zostana one dodane. Ujete moga zostac w koncu nie tylko
hieroglify i rozne, historyczne jezyki indoeuropejskie, lecz takze
wybrane pisma artystyczne, jak tengwar, cirth i klingonski. UCS
obejmuje rowniez wiele symboli graficznych, typograficznych,
matematycznych i naukowych, dostarczanych z TeX-em, PostScriptem,
APL-em, MS-DOS-em, Macintoshem oraz fontami OCR i wieloma innymi
systemami przetwarzania tekstow, a wciaz dodawane sa nowe.
Standard UCS (ISO/IEC 10646) opisuje zestaw znakow o architekturze
31-bitowej skladajacy sie ze 128 24-bitowych grup, z ktorych kazda
dzieli sie na 256 16-bitowych plaszczyzn zlozonych z 256 8-bitowych
wierszy z 256 kolumnami, po jednej na kazdy znak. Pierwsza czesc
standardu (ISO /IEC 10646-1) definiuje pierwsze 65534 pozycji (0x0000
do 0xfffd), ktora sklada sie na podstawowa plaszczyzne wielojezyczna
(BMP) - ang. Basic Multilingual Plane, ktora jest 0. plaszczyzna w
grupie 0. Druga czesc standardu (ISO/IEC 10646-2) dodaje znaki do grupy
zerowej poza BMP w wielu plaszczyznach uzupelniajacych, w zakresie od
0x10000 do 0x10ffff. Nie istnieja plany dodawania znakow poza 0x10ffff
do standardu, zatem z calej przestrzeni kodu jedynie niewielka czesc
grupy 0. moze byc kiedykolwiek faktycznie uzyta w przewidywalnej
przeszlosci. BMP zawiera wszystkie znaki, ktore mozna znalezc
powszechnie w innych zestawach znakow. Plaszczyzny uzupelniajace,
dodane w ISO/IEC 10646-2 obejmuja jedynie bardziej egzotyczne znaki o
specjalnym zastosowaniu naukowym, do wydruku slownikow, wydawnictw,
wysokopoziomowych protokolow i potrzeb entuzjastow.
Reprezentacja kazdego znaku UCS jako 2-bajtowe slowo jest nazywana
postacia UCS-2 (tylko znaki BMP), podczas gdy UCS-4 jest reprezentacja
kazdego znaku jako slowo 4-bajtowe. Dodatkowo, istnieja dwie postacie
kodowania: UTF-8 w celu kompatybilnosci wstecznej z programami
przetwarzajacymi ASCII i UTF-16, w celu kompatybilnej obslugi znakow
spoza BMP - az do 0x10ffff, przez programy UCS-2.
Znaki UCS 0x0000 do 0x007f sa identyczne z tymi w klasycznym zestawie
znakow US-ASCII, a znaki w zakresie 0x000 do 0x00ff sa identyczne z
tymi w zestawie znakow ISO/IEC 8859-1 (Latin-1).
Znaki skladajace
Niektore punkty kodowe w UCS zostaly przypisane do znakow skladajacych.
Podobne sa one do niespacyjnych klawiszy akcentow na maszynie do
pisania. Znak skladajacy dodaje akcent do poprzedniego znaku.
Najwazniejsze znaki akcentowane maja osobne kody w UCS, jednak
mechanizm znakow skladajacych pozwala dodawac akcenty i inne znaki
diakrytyczne do kazdego znaku. Znaki skladajace zawsze nastepuja po
znaku, ktory modyfikuja. Dla przykladu, niemiecki znak A-umlaut
("Latin capital letter A with diaeresis") moze byc przedstawiony za
pomoca badz to istniejacego juz zlozonego znaku UCS o kodzie 0x00c4,
badz alternatywnie jako kombinacja zwyklych znakow "Latin capital
letter A" i "combining diaeresis": 0x0041 0x0308.
Znaki skladajace sa istotne na przyklad do kodowania pisma tajskiego
lub do skladu zapisu matematycznego oraz uzytkownikow miedzynarodowego
alfabetu fonetycznego (IPA).
Poziomy implementacji
Poniewaz nalezy sie spodziewac, ze nie wszystkie systemy beda
obslugiwac zaawansowane mechanizmy w rodzaju skladania znakow, ISO/IEC
10646-1 okresla nastepujace trzy poziomy implementacji UCS:
Poziom 1 Nieobslugiwane sa znaki skladane i Hangul Jamo (specjalne,
bardziej skomplikowane kodowanie pisma koreanskiego, w ktorym
sylaby Hangul sa kodowane jako dwa lub trzy podznaki).
Poziom 2 Oprocz zastrzezen poziomu 1, obslugiwane sa znaki skladajace w
przypadku jezykow, dla ktorych sa one istotne (np. tajski,
lao, hebrajski, arabski, dewanagari, malajski).
Poziom 3 Obslugiwane sa wszystkie znaki UCS.
Unicode 3.0 Standard opublikowany przez Unicode Consortium zawiera
dokladnie UCS Basic Multilingual Plane (plaszczyzne podstawowa) w
poziomie implementacji 3, zgodnie z ISO/IEC 10646-1:2000. Unicode 3.1
dodaje plaszczyzny uzupelniajace z ISO/IEC 10646-2. Standard Unikodu i
dokumenty techniczne opublikowane przez Unicode Consortium zawieraja
wiele dodatkowych informacji o semantyce i zalecanym uzyciu roznych
znakow. Dostarczaja wskazania i algorytmy do edytowania, sortowania,
porownywania, normalizowania, konwertowania i wyswietlania lancuchow
Unikodu.
Unikod w systemie Linux
W systemie GNU/Linux, typ C wchar_t jest 32-bitowa liczba typu integer
ze znakiem. Jej wartosc sa interpretowane przez biblioteke C, zawsze
jako wartosci kodu UCS (we wszystkich ustawieniach locale), a ta
konwencja jest sygnalizowana przez biblioteke GNU C w stosunku do
aplikacji, przez zdefiniowane stalej __STDC_ISO_10646__, zgodnie ze
standardem ISO C99.
UCS/Unikod moze byc uzywany identycznie jak ASCII w lancuchach
wejscia/wyjscia, komunikacji terminalowej, plikach tekstowych, nazwach
plikow i zmiennych srodowiskowych w wielobajtowym kodowaniu UTF-8
kompatybilnym z ASCII. Aby zasygnalizowac uzywanie kodowania znakow
UTF-8 wszystkim aplikacjom, nalezy wybrac odpowiednie locale za pomoca
zmiennych srodowiskowych (np. "LANG=pl_PL.UTF-8").
Funkcja nl_langinfo(CODESET) zwraca nazwe wybranego kodowania. Funkcje
biblioteczne, takie jak wctomb(3) i mbsrtowcs(3) moga byc uzywane do
przeksztalcenia wewnetrznych znakow i lancuchow wchar_t na kodowanie
znakow systemowych i z powrotem, a wcwidth(3) informuje, jak wiele
pozycji 0-2) kursor przesunal sie przez wyswietlenie znaku.
Obszar prywatny - PUA (ang. Private Use Areas)
W Basic Multilangual Plane, kodom z zakresu 0xe000 do 0xf8ff nigdy nie
zostana przypisane znaki; sa one zarezerwowane do uzytku prywatnego.
Dla spolecznosci Linuksowej ow obszar prywatny zostal dalej podzielony
na zakres od 0xe000 do 0xefff, ktorego moze uzywac indywidualnie kazdy
uzytkownik, oraz strefe linuksowa w zakresie 0xf000 do 0xf8ff, ktorej
rozszerzanie podlega koordynacji pomiedzy wszystkimi uzytkownikami
Linuksa. Rejestr znakow przypisanych do strefy Linuksowej jest
zarzadzany przez LANANA, a sam rejestr jest plikiem
Documentation/admin-guide/unicode.rst w zrodlach jadra Linux (lub
Documentation/unicode.txt w wersji jadra starszej niz 4.10).
Kolejne dwie plaszczyzny zarezerwowane do uzytku prywatnego to
plaszczyzna 15 (dodatkowy obszar uzytku prywatnego A - ang.
Supplementary Private Use Area-A, w zakresie 0xf0000 do 0xffffd) oraz
16 (dodatkowy obszar uzytku prywatnego B - ang. Supplementary Private
Use Area-B, w zakresie 0x100000 do 0x10fffd).
Literatura
o Information technology -- Universal Multiple-Octet Coded Character
Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane.
International Standard ISO/IEC 10646-1, International Organization
for Standardization, Genewa, 2000.
Jest to oficjalna specyfikacja UCS. Dostepna z .
o The Unicode Standard, Version 3.0. The Unicode Consortium,
Addison-Wesley, Reading, MA, 2000, ISBN 0-201-61633-5.
o S. Harbison, G. Steele. C: A Reference Manual. Fourth edition,
Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3.
Dobra ksiazka-informator jezyka programowania C. Czwarte wydanie
obejmuje takze 1 Poprawke do standardu ISO C90, ktora dodaje znaczna
liczbe nowych funkcji bibliotecznych C do obslugi szerokich i
wielobajtowych zestawow znakow, ale nie opisuje ISO C99, jeszcze
bardziej poprawiajacej obsluge znakow szerokich i wielobajtowych.
o Unicode Technical Reports.
o Markus Kuhn: UTF-8 and Unicode FAQ for UNIX/Linux.
o Bruno Haible: Unicode HOWTO.
ZOBACZ TAKZE
locale(1), setlocale(3), charsets(7), utf-8(7)
TLUMACZENIE
Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Gwidon
S. Naskrent i Michal Kulach
Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o
warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public
License w wersji 3 lub
nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI.
Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy
dyskusyjnej .
Linux man-pages 6.8 2 maja 2024 r. unicode(7)