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.
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 |
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; }