UTF-8 позволяет использовать весь диапазон существующих и еще не придуманных символов. Она не зависит от архитектуры процессора (где важен порядок байтов в машинном слове). Она слабо чувствительна к повреждениям текста, выпаданию и нарушению порядка байтов в тексте. Первые 127 символов полностью совпадают с таблицей ASCII, что избавляет от проблем многобайтных кодировок в технических текстах (логи, конфиги, разметка).
Главный недостаток UTF-8 это динамическая длина символа в байтах, что затрудняет манипуляции символами внутри строки. Но поскольку в подавляющем большинстве случаев все манипуляции идут от начала строки к концу, то это не проблема, особенно на современном железе.
Ширину знаков лучше хранить в словаре, поскольку каждый знак это по сути строка, и диапазон знаков может быть непредсказуемым. Если ресурсы системы пипец как ограничены (микроконтроллер?), то лучше использовать 1-байтную кодовую страницу, по старинке.