不能以HTML格式复制UNI code(使用wchar_t的)到剪贴板 [英] Can't copy unicode(used wchar_t) in HTML format to clipboard
问题描述
复制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
, notwchar_t
—and paste that.这篇关于不能以HTML格式复制UNI code(使用wchar_t的)到剪贴板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!