strcoll
должен быть осведомлен о локали и правильно обрабатывать UTF8, по крайней мере, если это кодировка локали по умолчанию. Если это не так, я до сих пор понятия не имею. Как обходной путь, вы можете преобразовать многобайтовую строку в wchars (mbrtowc), а затем использовать wcscasecmp, который, к сожалению, является расширением GNU, а не частью стандартных библиотек ... Возможно, это не очень полезно.