Вот слегка измененный вариант, позволяет указывать кодировки при вызове функции, ее так же можно использовать при вводе данных для последующей обработки, только поменять местами CP_UTF8 и 866.
Код:
char* str_convert(const char *buf, UINT codepage_from, UINT codepage_to)
{
wchar_t* pResw = 0;
char* pRes = 0;
int res_len = 0;
res_len = MultiByteToWideChar(codepage_from, 0, (LPCSTR)buf, -1, 0, 0);
if (!res_len)
return NULL;
pResw = new wchar_t[res_len];
if (!MultiByteToWideChar(codepage_from, 0, (LPCSTR)buf, -1, pResw, res_len))
{
delete[] pResw;
return NULL;
}
res_len = WideCharToMultiByte(codepage_to, 0, pResw, -1, 0, 0, 0, 0);
if (!res_len)
return 0;
pRes = new char[res_len];
if (!pRes)
return NULL;
if (!WideCharToMultiByte(codepage_to, 0, pResw, -1, pRes, res_len, 0, 0))
{
delete[] pRes;
return NULL;
}
delete[] pResw;
return pRes;
}
И не забываем удалять строку после использования:
Код:
int _tmain(int argc, _TCHAR* argv[])
{
char* str = str_convert("some text", CP_UTF8, 866);
printf("%s\n", str);
delete[] str;
return 0;
}