救命啊,linux和windows之间SOCKET通信中文为乱码!
写了个模拟程序,windows和windows之间正常,linux和linux之间正常,但是windows和linux如果是中文字符就是乱码,怎么破?
[解决办法]
全部UTF-8或者全部GBK
windows下默认是GBK,linux下默认是UTF-8,所以,不做处理,必然悲剧
[解决办法]
对电脑而言只有二进制字节,对人脑才有汉字、GBK、Unicode、BIG5、Shift-JIS、……
特供显示字符串实际字节内容用:
- C/C++ code
void HexDump(char *buf,int len) { int i,j,k; char binstr[80]; for (i=0;i<len;i++) { if (0==(i%16)) { sprintf(binstr,"%04x -",i); sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]); } else if (15==(i%16)) { sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]); sprintf(binstr,"%s ",binstr); for (j=i-15;j<=i;j++) { sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.'); } printf("%s\n",binstr); } else { sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]); } } if (0!=(i%16)) { k=16-(i%16); for (j=0;j<k;j++) { sprintf(binstr,"%s ",binstr); } sprintf(binstr,"%s ",binstr); k=16-k; for (j=i-k;j<i;j++) { sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.'); } printf("%s\n",binstr); }}