UTF-8(7) Linux - prirucka programatora UTF-8(7)
JMENO
UTF-8 - vicebytove Unicode kodovani, kompatibilni s ASCII
POPIS
Znakova sada Unicode je 16 bitova. Nejbeznejsi kodovani (zname jako
UCS-2) je sekvenci 16-bitovych slov. Retezce z takovychto slov obsahuji
mnoho 8-bitovych znaku jako je '\0' nebo '/', ktere maji specialni
vyznam v jmenech souboru a i ve argumentech funkci jazyka C. Navic,
naprosta vetsina UNIXovych nastroju ocekava ASCII soubory a nemohou
cist 16-bitove znaky bez vyznamnych zmen kodu. Z techto duvodu neni
UCS-2 vhodnym kodovanim Unicode ve jmenech souboru, v textovych soubo-
rech, environmentu atd. ISO 10646 Universal Character Set (UCS), je
nadmnozinou Unicode, zabira 31-bitovy prostor jehoz kodovani UCS-4
(sekvence 32-bitovych slov) ma tytez problemy.
Kodovani UTF-8 pro Unicode a UCS tyto problemy nema, a proto vytvari
cestu, jak vyuzivat Unicode v Unixovych (a podobnych) operacnich
systemech.
VLASTNOSTI
Kodovani UTF-8 ma nekolik peknych vlastnosti:
* znaky UCS 0x00000000 to 0x0000007f (bezne znaky US-ASCII ) jsou
kodovany jako byty 0x00 az 0x7f (kompatibilni s ASCII). To znamena,
soubory a retezce, obsahujici pouze 7-bitove ASCII jsou kodovany
stejne v ASCII i v UTF-8.
* Vsechny znaky UCS > 0x7f jsou kodovany jako sekvence bytu v rozmezi
od 0x80 do 0xfd, takze se zde neobjevi zadny znak ASCII ani nevzni-
kaji problemy se znaky jako '\0' nebo '/'.
* Lexikograficke usporadani znaku z UCS-4 se zachovava.
* Libovolnou z 2^31 kombinaci UCS lze zakodovat pomoci UTF-8.
* Kody 0xfe a 0xff nejsou pouzity v kodovani UTF-8 .
* Prvni byte vicebytove sekvence reprezentujici jeden ne-ASCII znak UCS
je vzdy v intervalu 0xc0 az 0xfd a indikuje, jak dlouha je sekvence
bytu. Vsechny nasledujici byty jsou v rozmezi 0x80 az 0xbf. Toto
umoznuje jednoduchou resynchronizaci pri vypadku bytu(u), protoze se
jedna o bezstavove kodovani.
* UTF-8 koduje znaky UCS az do sestibytovych sekvenci, ackoli Unicode
znaky mohou byt nejvyse tribytove. Protoze Linux pouziva pouze
16-bitovy Unicode jako podmnozinu UCS, mohou byt UTF-8 viceznakove
sekvence dlouhe nejvyse 3 byty.
KODOVANI
Nasledujici sekvence jsou pouzity pro reprezentovani znaku. Typ pouzite
sekvence zavisi na kodu UCS daneho znaku:
0x00000000 - 0x0000007F:
0xxxxxxx
0x00000080 - 0x000007FF:
110xxxxx 10xxxxxx
0x00000800 - 0x0000FFFF:
1110xxxx 10xxxxxx 10xxxxxx
0x00010000 - 0x001FFFFF:
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0x00200000 - 0x03FFFFFF:
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0x04000000 - 0x7FFFFFFF:
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
The xxx pozice jsou zaplneny bity z kodu znaku v binarni reprezentaci.
Vzdy je pouzita nejkratsi mozna sekvence pro dany znak.
PRIKLADY
Znak Unicode
0xa9 = 1010 1001 (copyright) je kodovan v UTF-8 jako:
11000010 10101001 = 0xc2 0xa9
a znak 0x2260 = 0010 0010 0110 0000 (neni rovno) je kodovan jako:
11100010 10001001 10100000 = 0xe2 0x89 0xa0
STANDARDY
ISO 10646, Unicode 1.1, XPG4, Plan 9.
AUTOR
Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
VIZ TEZ
unicode(7)
Linux 17. cervence 1998 UTF-8(7)