Проблемы при работе SetClipboardData (и работе с её кодировками)

Я только начинаю изучать c++ и для практики решил написать небоьшую программу. Суть программы в том, что она должна исправлять ошибку ввода. Например пользователь ввёл "ghbdtn", программа должна выдать "привет". Далее это всё должно идти в буфер обмена, тут и заключается главная проблема. В консоли всё отображается корректно, но стоит нажать ctrl + v, то выскакивают всякие кракозябры (по типу таких êóïóïêóïóï). Я думаю дело в SetClipboardData, но мне не хватает опыта для решения проблемы.

void Clipboard(char* text)
{
    OpenClipboard(0);
    EmptyClipboard();
    char* hMem = (char*)GlobalAlloc(GMEM_MOVEABLE, strlen(text) + 1);
    strcpy_s(hMem, strlen(text )+1, text);
    std::cout << hMem << '\n';
    std::cout << text;
    SetClipboardData(CF_TEXT, hMem);
    CloseClipboard();


}

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    using namespace std;
    string str1;
    getline(cin, str1);
    char array1[100]{0};
    cout << str1.length();
    for (int count = 0; count < str1.length() ; count++)
    {
        switch(str1[count]) {
            
        case 'q':
            array1[count] = 'й';
            break;
        case 'w':
            array1[count] = 'ц';
            break;
        case 'e':
            array1[count] = 'у';
            break;
        case 'r':
            array1[count] = 'к';
            break;
        case 't':
            array1[count] = 'е';
            break;
        case 'y':
            array1[count] = 'н';
            break;
        case 'u':
            array1[count] = 'г';
            break;
        case 'i':
            array1[count] = 'ш';
            break;
        case 'o':
            array1[count] = 'щ';
            break;
        case 'p':
            array1[count] = 'з';
            break;
        case '[':
            array1[count] = 'х';
            break;
        case ']':
            array1[count] = 'ъ';
            break;
        case 'a':
            array1[count] = 'ф';
            break;
        case 's':
            array1[count] = 'ы';
            break;
        case 'd':
            array1[count] = 'в';
            break;
        case 'f':
            array1[count] = 'a';
            break;
        case 'g':
            array1[count] = 'п';
            break;
        case 'h':
            array1[count] = 'р';
            break;
        case 'j':
            array1[count] = 'о';
            break;
        case 'k':
            array1[count] = 'л';
            break;
        case 'l':
            array1[count] = 'д';
            break;
        case ';':
            array1[count] = 'ж';
            break;
        case '\'':
            array1[count] = 'э';
            break;
        case 'z':
            array1[count] = 'я';
            break;
        case 'x':
            array1[count] = 'ч';
            break;
        case 'c':
            array1[count] = 'с';
            break;
        case 'v':
            array1[count] = 'м';
            break;
        case 'b':
            array1[count] = 'и';
            break;
        case 'n':
            array1[count] = 'т';
            break;
        case 'm':
            array1[count] = 'ь';
            break;
        case ',':
            array1[count] = 'б';
            break;
        case '.':
            array1[count] = 'ю';
            break;
        case '`':
            array1[count] = 'ё';
            break;
        case ' ':
            array1[count] = ' ';
            break;
        }
    }
    /*for (int count = 0; count < str1.length(); count++)
    {
        cout  << array1[count];
    }

    cout << array1;
    */
    cout << array1;
    Clipboard(array1);

}



Ответы (1 шт):

Автор решения: Lammer

Проблема решилась, нужно было использовать широкие символы, они корректно перекодируются в UTF

→ Ссылка