VS2010 , socket, unicode, CString字符串连接字符数组出现乱码

代码如下:char szTemp[200];
int n = Receive(szTemp, 200);
szTemp[n] = '\0';
CString sTemp;
sTemp.Format(_T("收到: %s") , szTemp);
经分析,发现是字符串转化时出问题,比如下面这个
char sz[] = "asd";
CString s;
s.Format(_T("shoudao收到 : %s"), sz);
AfxMessageBox(s);
这样会出现乱码,请问该怎么解决?
现在问题是wchar_t szTemp[200];
int n = Receive(szTemp, 200);
szTemp[n] = '\0';
CString sTemp;
sTemp.Format(_T("收到: %s") , szTemp);这样的话接受客户端信息时会出现乱码。
最新回答
你好调皮

2024-04-26 03:00:40

应该是存在字符集转换的问题他,网络传播是最好使用utf8字符集,到客户端的时候在转换成为unicode,这样的话肯定不会有问题
诺贝尔可爱奖

2024-04-26 07:51:50

char 是ASCII码吧,2010应该默认是unicode码。这个应该是编码转换的问题。
应该用w_char吧。然后注意用_T()转换
追问
wchar_t可以解决字符串转换问题了,可是
wchar_t szTemp[200];
int n = Receive(szTemp, 200);
szTemp[n] = '\0';
CString sTemp;
sTemp.Format(_T("收到: %s") , szTemp);这样还是不行,请问该怎么改
追答
可以用两段CString相加么?刚换了2008测了下。
wchar_t a[100] = _T("123456");
CString Temp = _T("收到:");
CString str(a);
CString Temp1 = Temp + str;
最后Temp1 = 收到:123456.
没有问题了。
追问
用wchar_t 加 _T("字符串")是可以这样的,不过我现在在用socket建服务器端,
wchar_t szTemp[200];
int n = Receive(szTemp, 200);
szTemp[n] = '\0';现在是要从系统中读取字符串,但是读的字符串怎么变成_T()形式呢?
窗外的海风吹过

2024-04-26 04:51:03

考虑到诸多因素,SOCKET通信一般使用的是ASCII编码,因此,使用char数组来接收SOCKET传来的字符是没有什么问题的。

但是,从char数组到CString的转换,需要看你工程里的UNICODE宏定义。如果你使用了UNICODE,那么,就必须有一个窄字符串到宽字符串的转换,一般使用宏A2T就行了。如:
CString sTemp = A2T(szTemp);

同样,在send的时候也要注意这个问题,需要T2A.