2013-04-12 94 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