如何判断Windows剪贴板上的文本是否为ISO 8859或C++中的UTF-8?

KPe*_*xEA 6 c++ windows clipboard utf-8

我想知道是否有一种简单的方法来检测剪贴板上的文本是ISO 8859还是UTF-8?

这是我目前的代码:

    COleDataObject  obj;

    if (obj.AttachClipboard())
    {
        if (obj.IsDataAvailable(CF_TEXT))
        {
            HGLOBAL hmem = obj.GetGlobalData(CF_TEXT);
            CMemFile sf((BYTE*) ::GlobalLock(hmem),(UINT) ::GlobalSize(hmem));
            CString buffer;

            LPSTR str = buffer.GetBufferSetLength((int)::GlobalSize(hmem));
            sf.Read(str,(UINT) ::GlobalSize(hmem));
            ::GlobalUnlock(hmem);

            //this is my string class
            s->SetEncoding(ENCODING_8BIT);
            s->SetString(buffer);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*som 5

在此 Microsoft 页面查看 CF_LOCALE 的定义。它告诉您剪贴板中文本的区域设置。更好的是,如果您使用 CF_UNICODETEXT,Windows 将为您转换为 UTF-16。