UNICODE(7)

JMÉNO
Unicode - sjednocená 16-bitová znaková sada

POPIS
Mezinárodní standard ISO 10646 definuje Universal Character Set (UCS). UCS obsahující všechny znaky všech kódování znakových sad. Navíc garantuje kompatibilitu zpětné konverze, to jest je možno postavit konverzní tabulky tak, aby nedocházelo ke ztrátě informace při konverzi do UCS a zpět. UCS obsahuje znaky potřebné pro téměř všechny známé jazyky. Mimo jiné je to mnoho jazyků využívajících rozšíření latinky a také následující jazyky a písma: řečtinu, azbuku, hebrejštinu, arabštinu, arménštinu, gruzínštinu, japonštinu, čínštinu, skripty Hiragana, Katakana, korejštinu, Hangul, Devangari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada, Malayam, Thai, Lao, Bopomofo, a mnoho jiných. Pracuje se na vložení dalších písem jako tibetského, khmerského, run, etiopského, hieroglyfů, různých indoevropských jazyků a mnoha dalších. Pro většinu těchto písem nebylo v době vydání standardu v roce 1993 jasné jaké kódování zvolit. Navíc ke znakům pro tyto jazyky je třeba ještě přidat mnoho grafických, typografických, matematických a vědeckých symbolů používaných např. v TeXu, PostScriptu, MS-DOSu, sada počítačů Macintosh, ve Videotexu, OCR, stejně tak jako mnoho speciálních kódu, které garantují zpětný překlad pro existující znakové sady. Kódování UCS (ISO 10646) popisuje 31-bitovou znakovou sadu, ačkoli dnes se z ní používá pouze prvních 65534 kódů (0x0000 to 0xfffd), které jsou nazvány Basic Multilingual Plane (BMP), přičemž se očekává, že jenom velmi exotické znaky, jako jsou např. hieroglyfy pro zvláštní vědecké použití, budou kódovány mimo 16-bitový interval. Kódování UCS pro znaky mezi 0x0000 a 0x007f je totožné s běžnou sadou US-ASCII a znaky mezi 0x0000 a 0x00ff jsou totožné se sadou ISO 8859-1 Latin-1

SPOJOVÁNÍ ZNAKŮ
Některé kódy v UCS jsou přiřazeny tzv. akcentům. Tyto jsou podobné neposouvajícím znakům na psacím stroji. Akcent přidává modifikuje předchozí znak. Nejdůležitější znaky s akcenty sice mají své vlastní kódy v UCS, ale akcentové znaky dovolují přidat libovolné diakritické znaménko k libovolnému znaku. Akcent vždy následuje znak, který je modifikován. Například, německý znak Umlaut-A může být reprezentován pomocí kódu UCS 0x00c4 a nebo alternativně jako kombinace normálního velkého A, následovaného akcentem umlaut: 0x0041 0x0308.

ÚROVNĚ IMPLEMENTACE
Protože se neočekává,že všechny systémy budou podporovat všechny varianty kódování, ISO 10646 definuje následující tři úrovně implementace UCS:

Level 1
    Akcenty a znaky Hanghul Jamo (speciální, komplikované kódování korejského písma, kde jsou jednotlivé symboly dány jako sekvence dvou či tří znaků) nejsou podporovány.

Level 2
    Jako level 1, přičemž některé kombinující znaky jsou povoleny (např. pro hebrejštinu, arabštinu, Devangari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugo, Kannada, Malayalam, Thai a Lao).

Level 3
    Všechny znaky z UCS jsou povoleny.

Standard Unicode 1.1 publikovaný Unicode Consorciem sestává přesně z UCS Basic Multilingual Plane na úrovni implementace level 3, definované v ISO 10646. Unicode 1.1 také přidává definice pro některé znaky z ISO 10646.

UNICODE POD LINUXEM
Operační systém Linux podporuje v této chvíli pouze BMP úrovně 1, pro zachování malé složitosti implementace. Vyšší úrovně jsou nutné pro speciální zpracování textů, nikoli pro základní znakovou sadu. Datový typ jazyka C wchar_t je na Linuxu definován jako 16 bitů bez znaménka a je interpretován jako UCS level 1 BMP kódy. Nastavení locale určuje jaké je systémové kódování znaků, např. UTF-8 nebo ISO 8859-1. Knihovní funkce jako wctomb, mbtowc, nebo wprintf mohou být použity jako (oboustranně) konverzní do interního typu wchar_t pro znaky i řetězce.

VYHRAZENÁ OBLAST
Kódy BMP, v intervalu 0xe000 do 0xf8ff nikdy nesmějí být definovány standardem a jsou vyhrazeny pro privátní použití. Pro uživatele Linuxu je tato oblast rozdělena na interval od 0xe000 do 0xefff, který je určen pro individuální použití a tzv. Linuxovou zónu od 0xf000 do 0xf8ff, kde jsou rozšíření definována pro všechny instalace Linuxu. Tato rozšíření jsou registrována (v současné době) H. Peter Anvinem <Peter.Anvin@linux.org>, Yggdrasil Computing, Inc. Momentálně obsahuje některé grafické znaky z terminálu DEC VT100, které v Unicode chybí, dále je zde přímý výstup na font na konzoli a některé znaky pro písmo Klingonů.

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, Geneva, 1993. Toto je oficiální specifikace UCS. Velmi oficiální, velmi tlustá a velmi drahá. Lze objednat na www.iso.ch.

*   The Unicode Standard - Worldwide Character Encoding Version 1.0. The Unicode Consortium, Addison-Wesley, Reading, MA, 1991. V současné době je již k dispozici Unicode 1.1.4. Změny od verze 1.0 lze najít na ftp.unicode.org. Unicode 2.0 bude publikováno jako kniha v roce 1996.

*   S. Harbison, G. Steele. C - A Reference Manual. Fourth edition, Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3. Dobrá referenční kniha o jazyku C. Čtvrté vydání také zahrnuje dodatek (ISO/IEC 9899:1990), který definuje mnoho knihovních funkcí pro práci větší znakovou sadou.

CHYBY
V době psaní tohoto manuálu, podpora Linux libc pro UCS není zdaleka hotova.

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

VIZ TÉŽ
utf-8(7)