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

标签 c++ windows utf-8 clipboard

我想知道是否有一种简单的方法来检测剪贴板上的文本是 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);
        }
    }
}

最佳答案

this Microsoft page 查看 CF_LOCALE 的定义.它告诉您剪贴板中文本的语言环境。更好的是,如果您改用 CF_UNICODETEXT,Windows 将为您转换为 UTF-16。

关于c++ - 如何判断 Windows 剪贴板上的文本是 C++ 中的 ISO 8859 还是 UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/165551/

相关文章:

c++ - 更改非 Windows 应用商店应用程序的磁贴颜色?

c++ - 自 C++20 以来,是否允许对分配的存储进行指针运算?

c++ - Windows 上的 DLL Main 对比。 __attribute__((constructor)) Linux 上的入口点

php - 如何用 php 显示 mdb(access) 文件字段(包括 utf8(阿拉伯波斯语)字符)?

java - 默认编码和更改

c++ - 为虚拟机 C++ 实现堆栈

c++ - 如何为 MinGW 用户安装 gcc-arm-none-eabi?

c - 无法使用 Winapi 在 C 下更改窗口大小和缓冲区

php - 在 cakephp 中显示带有法语口音的数据

c++ - 如何在C/C++中从数组末尾开始复制数据