在c ++中使用正确的编码获取字符串

San*_*man 3 c++ winapi encoding utf-8 character-encoding

我之前问过类似的问题.但我仍然在使用c ++中的编码方面遇到麻烦.我试着尽可能地描述问题.

我有一个c ++客户端,通过TCP与c#服务进行通信.现在我需要在Messagebox(Win32 API)中显示来自服务的消息.由c#服务发送的字节是UTF-8编码的.

重要的是,c ++客户端只能在Windows系统上运行.

这是接收字节并显示Text的代码:

    char buffer[1024];
    int receivedBytes = recv(socketHandle, buffer, sizeof(buffer) - 1, 0);
    char str[receivedBytes];
    for (int index = 0; index < receivedBytes; index++)
    {
        str[index] = buffer[index];
    }

    MessageBox(mainWindow, (LPCTSTR)str, (LPCTSTR) "Fehler", MB_OK|MB_ICONERROR);
Run Code Online (Sandbox Code Playgroud)

如果文本包含类似üäö的聊天,则它们不会以正确的方式显示在消息框中.如何在c ++中以UTF-8字符串形式接收消息?有可能将char []转换为UTF-8字符串吗?

谢谢你的帮助

托比

W.B*_*.B. 7

如果要在Windows中显示unicode字符,则需要将UTF8字符串转换为UTF16(较旧的UCS2),因为这是Windows处理的unicode标准.您可以使用MultiByteToWideChar函数执行此操作.

还要确保在包含Windows标头之前设置了#define UNICODE,以便MessageBox指向MessageBoxW或显式使用MessageBoxW.