Ottieni stringhe nella giusta codifica in c ++

Ho già fatto una domanda simile prima. Ma sono ancora nei guai con le codifiche in c ++. Cerco di descrivere il problema nel miglior modo ansible.

Ho un client c ++, che comunica con un servizio c # su TCP. Ora ho bisogno di visualizzare i messaggi dal servizio in una Messagebox (API Win32). I byte, inviati dal servizio c #, sono codificati in UTF-8.

Importante sapere, il client c ++ funzionerà solo su sistemi Windows.

Questo è il codice per ricevere i byte e per visualizzare il testo:

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

Se il testo contiene caratteri come üäö, non vengono visualizzati nella Messagebox nel modo corretto. Cosa posso fare per ricevere il messaggio come stringa UTF-8 in c ++? C’è la possibilità di convertire il char [] in una stringa UTF-8?

Grazie per l’aiuto

Tobi

Se si desidera visualizzare caratteri unicode in Windows, è necessario convertire la stringa UTF8 in UTF16 (UCS2 meno recente), poiché si tratta degli handle standard di Unicode di Windows. Lo fai con la funzione MultiByteToWideChar .

Assicurati inoltre che #define UNICODE sia impostato prima di includere le intestazioni di Windows, in modo che MessageBox punti a MessageBoxW o utilizzi MessageBoxW in modo esplicito.