Q:

C++ UTF-8 в CP866

Пишу библиотеку для принтера. На вход подается текст в формате UTF-8. Принтер печатает кириллицу в формате CP866(кириллица). Как преобразовать UTF-8 в CP866? Возможно есть специальные функции?

A:

ifstream file("text.txt");
char pszCode[30];
file.getline(pszCode, 30);
BSTR    bstrWide;
char   pszAnsi[50];
int     nLength;
char* text = "";

nLength = MultiByteToWideChar(CP_UTF8, 0, pszCode, strlen(pszCode) + 1, NULL, NULL);
bstrWide = SysAllocStringLen(NULL, nLength);

MultiByteToWideChar(CP_UTF8, 0, pszCode, strlen(pszCode) + 1, bstrWide, nLength);

nLength = WideCharToMultiByte(CP_OEMCP, 0, bstrWide, -1, NULL, 0, NULL, NULL);
WideCharToMultiByte(CP_OEMCP, 0, bstrWide, -1, pszAnsi, nLength, NULL, NULL);
SysFreeString(bstrWide);

cout << pszAnsi << endl;

В общем использовал в этот метод, как посоветовал VladD, в принципе все работает, хотя конечно я так и не понял, как работают эти две функции до конца. Но все равно спасибо!

