UTF-8 文本到剪贴板 C

Jug*_*bot 3 c windows unicode clipboard utf-8

我一直在寻找如何带一根绳子,

\n\n
const char* output = "\xe3\x83\xbd(\xe2\x8c\x90\xe2\x96\xa0_\xe2\x96\xa0)\xe3\x83\x8e\xe2\x99\xaa\xe2\x99\xac";\n
Run Code Online (Sandbox Code Playgroud)\n\n

到剪贴板。

\n\n
SetClipboardData(CF_UNICODETEXT, hMem);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试过 MultiByteToWideChar,但我只收到噪音和相互矛盾的声明,即您无法将 UTF-16LE 保存到剪贴板(wchar_t)。老实说我只是很困惑。指导或代码示例会很棒。

\n

Bar*_*ani 5

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

\n\n
const char* text = u8"\xe3\x83\xbd(\xe2\x8c\x90\xe2\x96\xa0_\xe2\x96\xa0)\xe3\x83\x8e\xe2\x99\xaa\xe2\x99\xacE";\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n
const wchar_t* text = L"\xe3\x83\xbd(\xe2\x8c\x90\xe2\x96\xa0_\xe2\x96\xa0)\xe3\x83\x8e\xe2\x99\xaa\xe2\x99\xacE";\nint len = wcslen(text);\n\nHGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, (len + 1) * sizeof(wchar_t));\nwchar_t* buffer = (wchar_t*)GlobalLock(hMem);\nwcscpy_s(buffer, len + 1, text);\nGlobalUnlock(hMem);\n\nOpenClipboard(NULL);\nEmptyClipboard();\nSetClipboardData(CF_UNICODETEXT, hMem);\nCloseClipboard();\n
Run Code Online (Sandbox Code Playgroud)\n