当我使用 char 时,以HTML格式复制到剪贴板,但如果我使用 wchar_t 则无效
当我粘贴它时,它只是空的
这是我的代码Plase帮帮我
还是有更好的方法来使用unicode(不使用wchar_t)?如果你帮助了我
void copyStringEnd(wchar_t *string, wchar_t *buffer)
{
int i = 0;
int string_StartIndex = 0;
while (string[string_StartIndex] != NULL)
{
string_StartIndex++;
}
while (buffer[i] != NULL)
{
string[string_StartIndex + i] = buffer[i];
i++;
}
string[string_StartIndex + i] = '\0';
}
int main()
{
wchar_t *html = L"abc";
wchar_t *buf = (wchar_t*)malloc(400 + wcslen(html));
wcscpy_s(buf, 200,
L"Version:0.9\r\n"
L"StartHTML:00000000\r\n"
L"EndHTML:00000000\r\n"
L"StartFragment:00000000\r\n"
L"EndFragment:00000000\r\n"
L"<html><body>\r\n"
L"<!--StartFragment -->\r\n");
copyStringEnd(buf, html);
copyStringEnd(buf, L"\r\n");
copyStringEnd(buf,
L"<!--EndFragment-->\r\n"
L"</body>\r\n"
L"</html>");
wchar_t *ptr = wcsstr(buf, L"StartHTML");
wsprintfW(ptr + 10, L"%08u", wcsstr(buf, L"<html>") - buf);
*(ptr + 10 + 8) = '\r';
ptr = wcsstr(buf, L"EndHTML");
wsprintfW(ptr + 8, L"%08u", wcslen(buf));
*(ptr + 8 + 8) = '\r';
ptr = wcsstr(buf, L"StartFragment");
wsprintfW(ptr + 14, L"%08u", wcsstr(buf, L"<!--StartFrag") - buf);
*(ptr + 14 + 8) = '\r';
ptr = wcsstr(buf, L"EndFragment");
wsprintfW(ptr + 12, L"%08u", wcsstr(buf, L"<!--EndFrag") - buf);
*(ptr + 12 + 8) = '\r';
if (OpenClipboard(NULL)) {
EmptyClipboard();
HGLOBAL hText = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, wcslen(buf) * sizeof(wchar_t) + 4);
wchar_t *ptrs = (wchar_t *)GlobalLock(hText);
wcscpy_s(ptrs, wcslen(buf) + 2, buf);
GlobalUnlock(hText);
SetClipboardData(RegisterClipboardFormatA("HTML Format"), hText);
CloseClipboard();
GlobalFree(hText);
}
free(buf);
}
答案 0 :(得分:0)
剪贴板支持的唯一字符集是UTF-8编码的Unicode。
你所谓的“Unicode”是UTF-16-LE。这不是UTF-8。如果您尝试将UTF-16-LE解释为UTF-8,它将看起来像是以"V\0"
开头,然后大多数代码只会将\0
视为字符串的结尾并停止读数。
您需要将其编码为UTF-8(存储为char
,而不是wchar_t
- 并将其粘贴。