<< , >> , Úvod

Kód ISO/IEC 10646

Norma ISO/IEC 10646 definuje univerzální víceslabikový kód. Tento kód je schopen reprezentovan většinu používaných písemných forem jazyků celého světa. Z definovaných reprezentací jsou nejčastěji zmiňovány reprezentace UCS-2 a UCS-4. Reprezentace UCS-2 (nazývaná také BMP - Base Multilingual Plane) je kódem o šířce 16 bitů. Odpovídá kódu Unicode verze 1.1. Zahrnuje celou v současné době definovanou část plného kódu ISO 10646. Reprezentace UCS-4 je plná reprezentace s šířkou 32 bitů. Prvních 256 kódů znaků obou reprezentací odpovídá standardu ISO 8859-1. Obě reprezentace jsou určeny pro zpracování textů v rámci programu, ale nejsou vhodné pro přenos dat. Pro přenos dat, kde je vyžadována velikost znaku 1 slabika, jsou definovány transformační kódy UTF-7 (RFC1642) a UTF-8 (RFC2044). Oba tyto kódy jsou zahrnuty ve standardu Unicode 2.0. Kód UTF-8 je vhodný pro běžný přenos širokých znaků v prostředí, které je osmibitově šisté. Kód UTF-7 je určen pro přenos širokých znaků v prostředí elektronické pošty, konferencí a obecně prostředí, kde je zaručen pouze sedminitový přenos. normy ISO 10646, je kód UTF-8.

Kód UTF-8

Kód UTF-8 je víceslabikový kód, který má oproti jiným dřívějším návrhům kódů UTF jisté výhody. Především znaky kódu UCS-4 v intervalu 0 až 126 (kód ASCII) jsou reprezentovány hodnotami 0 až 126 a hodnoty 0 až 127 se jinak v kódu UTF-8 nevyskytují. První slabika kódu znaku dále indikuje, kolik následujících slabik tvoří tento znak:

počet slabik první slabika volných bitů následující slabiky maximální kód reprezentovatelného znaku UCS-4
1 0xxxxxxx 7 0x7F
2 110xxxxx 5 10xxxxxx 0x7FF
3 1110xxxx 4 10xxxxxx 0xFFFF
4 11110xxx 5 10xxxxxx 0x1F FFFF
5 111110xx 6 10xxxxxx 0x3FF FFFF
6 1111110x 1 10xxxxxx 0xFFFF FFFF
Díky zvolenému kódování lze nalézt začátek víceslabikového znaku od libovolného místa v řetězci slabik UTF-8 (stačí hledat slabiku s nejvyšším bitem nulovým nebo nejvyššími dvěma bity jedničkovými). Bity víceslabikového znaku jsou uloženy od nejvyššího po nejnižší. První slabika tedy obsahuje ve volných bitech nejvyšší bity kódu znaku. Znaky kódu Unicode lze reprezentovat sekvencí 1 až 3 slabik.

Příklad:

int UCS2toUTF8(wchar_t ucs_char, unsigned char *utf_str)
{
	int i;
	unsigned short ucs = ucs_char;

	if (ucs < 0x80) {
		*utf_str = (unsigned char)ucs;
		return 1;
	} else
	if (ucs < 0x800) {
		*utf_str++ = 0xc0 + (unsigned char)(ucs >> 6);
		*utf_str = 0xa0 + (ucs & 0x3f);
		return 2;
	} else
	if (ucs < 0x10000) {
		*utf_str++ = 0xe0 + (unsigned char)(ucs >> 12);
		*utf_str++ = 0xa0 + (unsigned char)((ucs >> 6) & 0x3f);
		*utf_str = 0xa0 + (ucs & 0x3f);
		return 3;
	} else return -1;
}
			


<< , >> , Úvod
Poslední změna: 1. June 1998
Pokud máte námět na vylepšení této stránky nebo na ní naleznete chybu, zašlete dopis na adresu lampa@fee.vutbr.cz.