Проблемы при работе 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