Строка CSocket Client-Server получила китайские символы

Простой CAsyncSocket Server и клиентская программа. Сейчас я тестирую локально, используя тера термин vt. Поэтому я набираю слово в ТТ, и оно отправляется в мою программу, но полученная строка — просто набор китайских символов. Я использую MFC и компилирую в Unicode. Самое смешное, что когда я соблюдаю многобайтовый набор символов, строка получается очень хорошо, поэтому я не уверен, что это значит или что я могу изменить, чтобы получить такой результат.

Код, где происходит получение

void CClientSock::OnReceive(int nErrorCode)
{
TCHAR buf[1000];
memset(buf,'\0',1000);
CString recStr;
int bytesRead;
bytesRead = Receive(buf,1000);

switch(bytesRead)
{
case 0:
Close();
break;
case SOCKET_ERROR:
if(GetLastError() != WSAEWOULDBLOCK)
{
AfxMessageBox(L"Error occured");
Close();
}
break;
default:
buf[bytesRead] = '\0';
CString temp(buf);
recStr = temp;

CT2A Astring(recStr);
CString nString(Astring);
AfxMessageBox(nString);

}
CAsyncSocket::OnReceive(nErrorCode);
}

1

Решение

Данные, которые вы получили от CAsyncSocket::Receive является, вероятно, многобайтовым символом, поэтому просто замените TCHAR buf[1000]; с char buf[1000];

Вы также создали слишком много избыточных строк CS для преобразования текста. Это можно упростить до:

default:
buf[bytesRead] = '\0';
recStr = buf;
AfxMessageBox(recStr);
0

Другие решения

Других решений пока нет …