读书人

linux和windows之间SOCKET通信中文为

发布时间: 2012-07-29 15:26:14 作者: rapoo

救命啊,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);    }} 

读书人网 >C++

热点推荐