Когда-то давно писал модуль для работы с различными предсталвениями Unicode под XDS-Oberon.
При написании опирался на стандарты.
Для полного счастья не хватает нормализации.

После этого еще делал utf8 -> utf16 и utf16 -> utf8 через конечный автомат, но на паскале. Если интересно могу поискать.