Texte UTF-8 dans le presse-papier C

Je cherchais comment amener une ficelle,

const char* output = "ヽ(⌐■_■)ノ♪♬"; 

dans le presse-papier.

 SetClipboardData(CF_UNICODETEXT, hMem); 

J’ai essayé MultiByteToWideChar, mais je n’ai eu que du bruit et des déclarations contradictoires disant qu’il est impossible d’enregistrer UTF-16LE dans le presse-papier (wchar_t). Honnêtement je suis juste confus. Une direction ou un exemple de code serait génial.

Windows utilise UTF-16LE. La chaîne doit être créée avec le préfixe L Pour utiliser UTF8, vous pouvez déclarer la chaîne avec le préfixe u8 . Par exemple:

 const char* text = u8"ヽ(⌐■_■)ノ♪♬E"; 

Ensuite, vous devez utiliser MultiByteToWideChar pour convertir UTF8 en UTF16 et l’utiliser dans WinAPI. Notez que pour utiliser u8 vous avez besoin de compilateurs plus récents comme VS2015.

Il est plus facile d’utiliser UTF16 en premier lieu. Par exemple:

 const wchar_t* text = L"ヽ(⌐■_■)ノ♪♬E"; int len = wcslen(text); HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, (len + 1) * sizeof(wchar_t)); wchar_t* buffer = (wchar_t*)GlobalLock(hMem); wcscpy_s(buffer, len + 1, text); GlobalUnlock(hMem); OpenClipboard(NULL); EmptyClipboard(); SetClipboardData(CF_UNICODETEXT, hMem); CloseClipboard();