3

我之前问过类似的问题。但我仍然在 c++ 中的编码方面遇到麻烦。我尽量描述问题。

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

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

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

    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);

如果文本包含像 üäö 这样的字符,它们不会以正确的方式显示在消息框中。我该怎么做才能在 c++ 中以 UTF-8 字符串形式接收消息?是否有可能将 char[] 转换为 UTF-8 字符串?

谢谢帮助

托比

4

1 回答 1

7

如果要在 Windows 中显示 unicode 字符,则需要将 UTF8 字符串转换为 UTF16(旧 UCS2),因为这是 unicode 标准 Windows 句柄。您可以使用MultiByteToWideChar函数来做到这一点。

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

于 2013-04-12T08:16:27.677 回答