Копирование в буфер обмена в формате 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);
}
В соответствии с документация:
Единственный набор символов, поддерживаемый буфером обмена, — это Unicode в кодировке UTF-8.
То, что вы называете «Unicode» это UTF-16-LE. Который не UTF-8. Если вы попытаетесь интерпретировать UTF-16-LE как UTF-8, это будет выглядеть так, как будто оно начинается с "V\0"
, а затем большая часть кода будет просто относиться к этому \0
как конец строки и прекратить чтение.
Вам нужно закодировать его в UTF-8, который хранится как char
не wchar_t
— и вставь это.
Других решений пока нет …