Не удается скопировать Unicode (используется wchar_t) в формате HTML в буфер обмена

Копирование в буфер обмена в формате 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

Решение

В соответствии с документация:

Единственный набор символов, поддерживаемый буфером обмена, — это Unicode в кодировке UTF-8.

То, что вы называете «Unicode» это UTF-16-LE. Который не UTF-8. Если вы попытаетесь интерпретировать UTF-16-LE как UTF-8, это будет выглядеть так, как будто оно начинается с "V\0", а затем большая часть кода будет просто относиться к этому \0 как конец строки и прекратить чтение.

Вам нужно закодировать его в UTF-8, который хранится как charне wchar_t— и вставь это.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector