UTF-8文本到剪贴板C

时间:2016-06-11 02:14:06

标签: c windows unicode utf-8 clipboard

我一直在寻找如何带字符串,

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

到剪贴板。

SetClipboardData(CF_UNICODETEXT, hMem);

我已经尝试过MultiByteToWideChar,但是我只得到了噪音,并且声称你无法将UTF-16LE保存到剪贴板(wchar_t)。老实说,我只是困惑。方向或代码样本会很棒。

1 个答案:

答案 0 :(得分:3)

Windows使用UTF-16LE。应使用L前缀创建字符串。要使用UTF8,您可以使用u8前缀声明字符串。例如:

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

然后你必须使用MultiByteToWideChar将UTF8转换为UTF16并在WinAPI中使用。请注意,要使用u8,您需要更新的编译器,如VS2015。

首先使用UTF16更容易。例如:

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();