UTF-8文本复制到剪贴板(Clipboard)

3

我一直在寻找如何传递一个字符串的方法,

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

复制到剪贴板。

SetClipboardData(CF_UNICODETEXT, hMem);

我已经尝试了MultiByteToWideChar,但是我只得到了噪音,并且还有冲突的说法,即你不能保存UTF-16LE到剪贴板(wchar_t)。老实说,我很困惑。如果能提供一个方向或代码示例就太好了。


什么操作系统? - Adrian
@Adrian:MultiByteToWideChar是一个Windows API,因此只能在Windows系统中使用。 - R.. GitHub STOP HELPING ICE
如果你决定使用SDL,这在SDL中非常容易。 - Chris Beck
1个回答

5

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接