windows C++ 模拟表情符号输入到浏览器窗口 - 乱序字符

问题描述 投票:0回答:1

我正在使用 Visual Studio Community 2022 构建一个 Windows C++ 应用程序,该应用程序基本上尝试使用一种或另一种方法将文本文件中的一行复制粘贴到 Chrome 浏览器的文本字段中。

我有一个 UTF-8 编码的 .txt 文件,每行包含一个句子,末尾有一个表情符号。

我正在尝试使用的示例表情符号:🤭

我将其读入向量或向量,代码如下:(我已经尝试过wstrings和字符串)

    ifstream infile("Lines.txt");
    if(!infile.is_open()) return false;

    string aLine;
    // Read the database
    while (getline(infile, aLine))
    {
        theDB.push_back(aLine);
    }

    infile.close();

    return !theDB.empty();

然后我尝试用 SendMessage(aWindow, WM_CHAR, aCharacter, 0);

然后将其复制到剪贴板,然后从那里粘贴。 (采用 CF_TEXT 和 CF_UNICODETEXT 格式,使用我已成功用于纯文本和西班牙语字母的方法。)

我还尝试在编译器选项中添加/utf8。

无论表情符号总是被打乱,但在大多数设置下,其余文本都可以正常工作。

c++ windows unicode utf-8 emoji
1个回答
0
投票

您需要将 utf8 转换为 wchar,幸运的是 Windows 有

MultiByteToWideChar
功能可以帮助您完成此操作,然后您就可以使用
CF_UNICODETEXT
复制到 Clipbaord。

这是我使用的功能。

wchar_t* utf8toWChar(const char* utf8string)
{
    const int buffsize = MultiByteToWideChar(CP_UTF8, 0, utf8string, -1, nullptr, 0);

    wchar_t* gah = static_cast<wchar_t*>(malloc((buffsize + 1) * sizeof(wchar_t)));

    MultiByteToWideChar(CP_UTF8, 0, utf8string, -1, gah, buffsize);
    gah[buffsize] = 0;

    return gah;
}
© www.soinside.com 2019 - 2024. All rights reserved.