Исправление EXL, 08.04.21 17:00 (текущая версия) :
Для O(1) в любом случае нужен UTF-32.
Вообще с UTF-16/32 слишком много возни: UTF-16BE, UTF-16LE, BOM. У UTF-8 такого нет.
Исходная версия EXL, 08.04.21 16:54: