Канонический способ сделать это с помощью wchar_t - если у вас есть строка широких символов и вы используете towlower / towupper / towctrans с вашими широкими символами (что будет работать, если ваш языковой стандарт установлен правильно).Поэтому вам нужно взять строку UTF-8, преобразовать ее в строку широких символов, а затем использовать эти функции, которые принимают wchar_t и затем конвертируют обратно.
Это гигантская PITA, так что вы, вероятно, лучшеотключить с помощью поддерживаемой библиотеки Unicode с открытым исходным кодом, например ICU .