Добрый день!
Хочу спросить совета и помощи в своей проблеме

Я пишу небольшую прогу в ubuntu на с++ для обработки данных из mysql
проблема в том что в mysql данные хранятся в utf8 и после выполнения запроса, функция mysql_fetch_row возвращает данные в типе char*, а не wchar_t*. Причем что интересно, данные возвращаются в кодировке utf8, просто представленные как тип char*. Если этот набор байт вывести последовательно на консоль, то все ОК
эта особенность делает невозможной работу с символами, т.к. utf8 многобайтная кодировка, а char* - однобайтное представление символов.
вопрос такой - как переконвертировать строковые данные представленные в виде набора байт типа char* в wchar_t* ?
вот код для иллюстрации проблемы
надеюсь на совет как правильно работать с utf8!

#include <iostream>
#include <locale>
#include <string>
#include <wchar.h>
#include <fstream>
#include <string.h>
#include <algorithm>
#include <wchar.h>
#include <my_global.h>
#include <mysql.h>
using namespace std;
void puterror(string str)
{
cerr<<str;
exit(1);
}
int main(int argc, char ** argv)
{
std::locale::global(std::locale(""));
MYSQL conn;
MYSQL_RES *res;
MYSQL_ROW row;
if(!mysql_init(&conn))
puterror("Error: can't create MySQL-descriptor\n");
if(!mysql_real_connect(&conn,
"localhost",
"login",
"password",
"db",
0,
"/tmp/mysql.sock",
0)){
cout<<mysql_error(&conn)<<endl;
puterror("Error: can't connect to MySQL server\n");
}
if (mysql_set_character_set(&conn, "utf8"))
{
cout<<mysql_error(&conn)<<endl;
puterror("Error: can't execute SQL-query\n");
}
if(mysql_query(&conn, "select Id, textData from mytable") != 0)
{
cout<<mysql_error(&conn)<<endl;
puterror("Error: can't execute SQL-query\n");
}
res = mysql_store_result(&conn);
if(res == NULL)
{
cout<<mysql_error(&conn)<<endl;
puterror("Error: can't get the result description\n");
}
while( row = mysql_fetch_row(res) )
{
if(mysql_errno(&conn) > 0)
puterror("Error: can't fetch result\n");
string str= row[1]; // row[1] имеет тип char* и содержит поток байт в utf8.
//это значит что если эти байты вывести последовательно на консоль или в файл, то все будет ОК - можно будет прочесть текст.
//Но работать со строкой на уровне символов не получится
wstring str2= reinterpret_cast<wchar_t*>(row[1]); // такая конвертация не работает, получается каша вместо символов
//wstring str2( str.begin(), str.end() ); // тоже самое.
//cout<<str<<endl; // здесь можно вывести поток байт на консоль корректно, и они будут читаться.
//cout<<str[1]<<endl; // но работать с символами таким образом не получится, на консоль выведется один байт из двухбатового символа utf8
wcout<<str2.size()<<endl;
wcout<<str2<<endl;
for(int i=0; i<str2.size(); i++)
wcout<<str2<<endl;
}
mysql_free_result(res);
mysql_close(&conn);
return 0;
}