不能以HTML格式复制UNI code(使用wchar_t的)到剪贴板 [英] Can't copy unicode(used wchar_t) in HTML format to clipboard

查看:165
本文介绍了不能以HTML格式复制UNI code(使用wchar_t的)到剪贴板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

复制HTML格式到剪贴板工作,当我使用字符,但如果我使用 wchar_t的这是行不通的。

当我粘贴它只是空的

这是我的code Plase帮助我

或有使用​​UNI code更好的方式(不使用wchar_t的)?如果你能帮我

 无效copyStringEnd(wchar_t的*字符串为wchar_t *缓冲区)
{
    INT I = 0;
    INT string_StartIndex = 0;    而(字符串[string_StartIndex]!= NULL)
    {
        string_StartIndex ++;
    }    而(缓冲[I]!= NULL)
    {
        字符串[string_StartIndex +我=缓冲[I]
        我++;
    }
    字符串[string_StartIndex + I] ='\\ 0';
}诠释的main()
{
    wchar_t的* HTML = LABC;
    wchar_t的* BUF =(wchar_t的*)malloc的(400 + wcslen(HTML));    wcscpy_s(BUF,200,
            L版本:0.9 \\ r \\ n
            LStartHTML:00000000 \\ r \\ n
            LEndHTML:00000000 \\ r \\ n
            LStartFragment:00000000 \\ r \\ n
            LEndFragment:00000000 \\ r \\ n
            L< HTML和GT;<身体GT; \\ r \\ n
            L<! - StartFragment - > \\ r \\ n);    copyStringEnd(BUF,HTML);
    copyStringEnd(BUF,L为\\ r \\ n);    copyStringEnd(BUF,
            L<! - EndFragment - > \\ r \\ n
            L< /身体GT; \\ r \\ n
            L< / HTML>中);    wchar_t的* ptr的= wcsstr(BUF,LStartHTML);
    wsprintfW(PTR + 10,L%08u,wcsstr(BUF中,L&所述; HTML>中) - 的buf);
    *(PTR + 10 + 8)='\\ r';    PTR = wcsstr(BUF,LEndHTML);
    wsprintfW(PTR + 8,L%08u,wcslen(BUF));
    *(PTR + 8 + 8)='\\ r';    PTR = wcsstr(BUF,LStartFragment);
    wsprintfW(PTR + 14,L%08u,wcsstr(BUF中,L&下;! - StartFrag) - 的buf);
    *(PTR + 14 + 8)='\\ r';    PTR = wcsstr(BUF,LEndFragment);
    wsprintfW(PTR + 12,L%08u,wcsstr(BUF中,L&下;! - EndFrag) - 的buf);
    *(PTR + 12 + 8)='\\ r';    如果(OpenClipboard(NULL)){
        EmptyClipboard();        HGLOBAL hText =的GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,wcslen(BUF)* sizeof的(wchar_t的)+ 4);        wchar_t的*师生比=(wchar_t的*)GlobalLock(hText);
        wcscpy_s(师生比,wcslen(BUF)+ 2,BUF);
        GlobalUnlock(hText);        SetClipboardData(RegisterClipboardFormatA(HTML格式),hText);
        CloseClipboard();
        GlobalFree(hText);
    }
    免费(BUF);
}


解决方案

据的文档


  

在剪贴板唯一支持的字符集是统一code在UTF-8编码。


你叫什么?的Uni code是UTF-16-LE。这是不是UTF-8。如果您尝试间preT UTF-16-LE为UTF-8,它会看起来像它与启动V \\ 0,然后最$ C $按c只是把那个 \\ 0 作为字符串的结束和停止阅读。

您需要连接code将其转换为UTF-8被存储为字符,而不是 wchar_t的 - 和粘贴。

Copying to clipboard in HTML format works when I use char, but if I use wchar_t it doesn't work

When I paste it it's just EMPTY

here is my code Plase Help me

Or is there a better way to use unicode(not using wchar_t)? If you do help me

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);
}

解决方案

According to the documentation:

The only character set supported by the clipboard is Unicode in its UTF-8 encoding.

What you're calling "Unicode" is UTF-16-LE. Which is not UTF-8. If you try to interpret UTF-16-LE as UTF-8, it's going to look like it starts with "V\0", and then most code will just treat that \0 as the end of the string and stop reading.

You need to encode it to UTF-8—which is stored as char, not wchar_t—and paste that.

这篇关于不能以HTML格式复制UNI code(使用wchar_t的)到剪贴板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆