UTF-8(7)

JMÉNO
UTF-8 - vícebytové Unicode kódování, kompatibilní s ASCII

POPIS
Znaková sada Unicode je 16 bitová. Nejběžnější kódování (známé jako UCS-2) je sekvencí 16-bitových slov. Řetězce z takovýchto slov obsahují mnoho 8-bitových znaků jako je '\0' nebo '/', které mají speciální význam v jménech souborů a i ve argumentech funkcí jazyka C. Navíc, naprostá většina UNIXových nástrojů očekává ASCII soubory a nemohou číst 16-bitové znaky bez významných změn kódu. Z těchto důvodů není UCS-2 vhodným kódováním Unicode ve jménech souborů, v textových souborech, environmentu atd. ISO 10646 Universal Character Set (UCS), je nadmnožinou Unicode, zabírá 31-bitový prostor jehož kódování UCS-4 (sekvence 32-bitových slov) má tytéž problémy. Kódování UTF-8 pro Unicode a UCS tyto problémy nemá, a proto vytváří cestu, jak využívat Unicode v Unixových (a podobných) operačních systémech.

VLASTNOSTI
Kódování UTF-8 má několik pěkných vlastností:

*   znaky UCS 0x00000000 to 0x0000007f (běžné znaky US-ASCII ) jsou kódovány jako byty 0x00 až 0x7f (kompatibilní s ASCII). To znamená, soubory a řetězce, obsahující pouze 7-bitové ASCII jsou kódovány stejně v ASCII i v UTF-8.

*   Všechny znaky UCS > 0x7f jsou kódovány jako sekvence bytů v rozmezí od 0x80 do 0xfd, takže se zde neobjeví žádný znak ASCII ani nevznikají problémy se znaky jako '\0' nebo '/'.

*   Lexikografické uspořádání znaků z UCS-4 se zachovává.

*   Libovolnou z 2^31 kombinací UCS lze zakódovat pomocí UTF-8.

*   Kódy 0xfe a 0xff nejsou použity v kódování UTF-8 .

*   První byte vícebytové sekvence reprezentující jeden ne-ASCII znak UCS je vždy v intervalu 0xc0 až 0xfd a indikuje, jak dlouhá je sekvence bytů. Všechny následující byty jsou v rozmezí 0x80 až 0xbf. Toto umožňuje jednoduchou resynchronizaci při výpadku bytu(ů), protože se jedná o bezstavové kódování.

*   UTF-8 kóduje znaky UCS až do šestibytových sekvencí, ačkoli Unicode znaky mohou být nejvýše tříbytové. Protože Linux používá pouze 16-bitový Unicode jako podmnožinu UCS, mohou být UTF-8 víceznakové sekvence dlouhé nejvýše 3 byty.

KÓDOVÁNÍ
Následující sekvence jsou použity pro reprezentování znaků. Typ použité sekvence závisí na kódu UCS daného 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 zaplněny bity z kódu znaku v binární reprezentaci. Vždy je použita nejkratší možná sekvence pro daný znak.

PŘÍKLADY
Znak Unicode
 0xa9 = 1010 1001 (copyright) je kódován v UTF-8 jako:

    11000010 10101001 = 0xc2 0xa9

a znak 0x2260 = 0010 0010 0110 0000 (není rovno) je kódován 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 TÉŽ
unicode(7)