Kodowanie UTF-8 ma następujące przydatne właściwości:
UCS znaki 0x00000000 do 0x0000007f (klasyczne znaki US-ASCII ) zakodowane są po prostu jako bajty 0x00 do 0x7f (kompatybilność z ASCII). Oznacza to że pliki i łańcuchy które zawierają tylko siedmiobitowe znaki ASCII mają takie samo kodowanie i w ASCII i w UTF-8
Wszystkie znaki UCS > 0x7f zakodowane są jako wielobajtowa sekwencja składająca się tylko z bajtów w zakresie 0x80 do 0xfd, tak więc żadne bajty ASCII nie moga się pojawić jako część innego znaku
Zachowany jest leksykograficzny porządek sortowania łańcuchów w UCS-4
Za pomocą UTF-8 można zakodować wszystkie możliwe 2^31 kody UCS.
Bajty 0xfe i 0xff nie są nigdy używane w kodowaniu UTF-8
Pierwszy bajt sekwencji wielobajtowej który reprezentuje pojedynczy znak UCS nie-ASCII zawsze zawiera się w zakresie 0xc0 do 0xfd i wskazuje jak długa jest owa sekwencja. Wszystkie pozostałe bajty w wielobajtowej sekwencji zawierają się w zakresie od 0x80 do 0xbf. Pozwala to na łatwą resynchronizację i sprawia że kodowanie jest niezależne od stanu [systemu], oraz odporne na brakujące bajty.
Znaki UCS zakodowane w UTF-8 mogą mieć długość do sześciu bajtów, jakkolwiek znaki Unicode mogą mieć tylko trzy bajty. Ponieważ Linux używa tylko 16-bitowego podzbioru Unicode UCS w Linuxie wielobajtowe sekwencje UTF-8 mogą mieć tylko jeden, dwa lub trzy bajty.
Kodowanie
Następujące sekwencje bajtów używane są do reprezentacji znaku:
sekwencja które należy użyć zależy od numeru kodu UCS znaku.
Pozycje bitowe xxx zostają wypełnione bitami numeru kodu znaku w reprezentacji dwójkowej. Może zostać użyta tylko najkrótsza możliwa wielobajtowa sekwencja które może reprezentować kod numeru danego znaku.
PRZYKŁADY
Znak Unicode 0xa9 = 1010 1001 (znak copyright) kodowany jest w UTF-8 jako
11000010 10101001 = 0xc2 0xa9
a znak 0x2260 = 0010 0010 0110 0000 (symbol "nie równa się") kodowany jest jako: