Честно стырено на ОтветахМейл, может, поможет :)
UTF8 устроен так, что символы с кодами 0-127 (английские буквы, цифры, знаки препинания и т. д. ) занимают один байт, и поэтому отображаются верно, а символы национальных языков занимают два байта. Отсюда и абракадабра при отображении русского текста.
Вам же нужно перевести все в однобайтовую кодировку Win-1251. Это можно сделать в два шага:
- преобразовать то, что прислано, в юникод (например, с помощью функции WinAPI MultiByteToWideChar, указав UFT8 в качестве кодировки)
- преобразовать строку из юникода в нужную кодировку (например, используя функцию WideCharToMultiByte, указав число 1251 первым параметром функции)
Как вариант, можно воспользоваться функциями стандартной библиотеки C.