Вам не нужно полностью переписывать, если вы уверены, что содержит ваша строка std ::. Например, вы можете предположить (и преобразовать входные данные, чтобы быть уверенными), что ваша std :: string содержит строки в кодировке UTF8 (для тех, которые нуждаются в локализации). Не забывайте, что std :: string является только контейнером необработанных данных, он не связан с кодировкой (даже в C ++ 0x, это всего лишь возможность, а не требование).
Затем, когда вы передаете текст в другие библиотеки, которым требуется другое кодирование, вы можете использовать библиотеки, такие как UTF8CPP, для преобразования в требуемую кодировку (но в большинстве случаев такие библиотеки будут делать это сами).
Этот способ делает это простым. UTF8 со стандартным std :: string в вашем коде, что позволяет передавать строку юникода во все остальное (с преобразованием при необходимости).
В списках рассылки сообщества поддержки было много дискуссий. Возможно, чтение (если у вас достаточно времени ...) поможет вам понять другие возможные решения.