2013-04-12 35 views
3

我之前问过类似的问题。 但我仍然在使用C++编码时遇到麻烦。 我尝试尽可能地描述问题。在C++中使用正确的编码获取字符串

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

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

这是接收的字节数和显示文本的代码:如果文本包含像UAO chatacters

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

,他们不是在MessageBox中所示的正确方法。 我能做些什么来接收消息作为UTF-8字符串在c + +? 是否有可能将char []转换为UTF-8字符串?

THX帮助

托比

+2

这里确实存在两个问题:如何处理tcp连接中的utf8字符串?以及如何处理winapi的utf8字符串? – didierc

+3

也许是因为你似乎没有在任何地方设置结果? –

+1

也许这个问题将有所帮助:http://stackoverflow.com/questions/504779/winapi-and-utf-8-support – didierc

回答

7

如果你想显示在Windows Unicode字符,则需要UTF8字符串转换为UTF-16(较老的UCS2),因为这是Unicode标准Windows处理。你用MultiByteToWideChar函数来做到这一点。

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

+0

谢谢,解决了这个问题。 – Sandman