Если рамки кодировки общего назначения (например, iconv) слишком раздуты для вас, накатайте свою собственную.
Составьте статическую таблицу перевода (последовательность char в последовательность UTF-8), соберите свой собственный перевод.В зависимости от того, что вы используете для хранения строк (буферы символов или std :: string или что), это будет выглядеть несколько иначе, но идея в том, чтобы прокрутить исходную строку, заменить каждый символ кодом более 127 с его UTF-8ответная строка.Поскольку это может потенциально увеличить длину строки, делать это на месте было бы довольно неудобно.Для получения дополнительной выгоды вы можете сделать это в два прохода: проход один определяет необходимый размер строки назначения, проход второй выполняет перевод.