UTF-8 文本到剪贴板 C
UTF-8 text to clipboard C
我一直在寻找如何带字符串,
const char* output = "ヽ(⌐■_■)ノ♪♬";
到剪贴板。
SetClipboardData(CF_UNICODETEXT, hMem);
我已经尝试过 MultiByteToWideChar,但我只收到了噪音,而且还有相互矛盾的说法,即您无法将 UTF-16LE 保存到剪贴板 (wchar_t)。老实说,我只是很困惑。最好有说明或代码示例。
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();
我一直在寻找如何带字符串,
const char* output = "ヽ(⌐■_■)ノ♪♬";
到剪贴板。
SetClipboardData(CF_UNICODETEXT, hMem);
我已经尝试过 MultiByteToWideChar,但我只收到了噪音,而且还有相互矛盾的说法,即您无法将 UTF-16LE 保存到剪贴板 (wchar_t)。老实说,我只是很困惑。最好有说明或代码示例。
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();