2014-01-20 66 views
0

在複製HTML到剪貼板,當我使用焦炭格式的作品,但如果我用wchar_t的它不工作不能以HTML格式複製的Unicode(使用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); 
} 
+2

這在文檔http://msdn.microsoft.com/en-us/library/aa767917(v=vs.85).aspx中解釋過「CF_HTML完全是文本格式並使用轉換格式UTF-8。 「 –

回答

0

根據the documentation:通過剪貼板支持

唯一的字符集是Unicode在UTF-8編碼。

你所說的「Unicode」是UTF-16-LE。這不是UTF-8。如果你試圖將UTF-16-LE解釋爲UTF-8,它會看起來像是從"V\0"開始,然後大多數代碼將把這個\0當作字符串的結尾並停止閱讀。

您需要將其編碼爲存儲爲char而不是wchar_t的UTF-8並粘貼。

+0

如果我使用char是UTF-8自動?如果它不是我怎麼編碼它? – wdeveloper

+2

使用'WideCharToMultiByte()'將UTF-16編碼的'wchar_t'緩衝區轉換爲UTF_8編碼的'char'緩衝區,然後您可以將'char'緩衝區放在剪貼板上。 –

相關問題