有关在SOCKET编程中,汉字编码问题.
socket.send(byte[])
汉字在内存中占两个字节,而ASCII只占一个字节.
如果只传ASCII,编码方法可为:System.Text.ASCIIEncoding.ASCII.GetBytes(str);
如果只传汉字,编码方法可为:System.Text.ASCIIEncoding.Unicode.GetBytes(str);
用Unicode的话,那么每个字都必须占两个字节,而对于英文,本来只占一个字节,但用Unicode的话就都占两字节了.但如果用ASCII编码,则对方收到的汉字是问号.我想问:在网络编程中,对于含有汉字的字符串,怎么编码传给对方?
比如将下面的字串传给对方:string str = "我爱abc";
如果System.Text.ASCIIEncoding.Unicode.GetBytes(str);
则abc分别占两字节.对于,我碰到的问题是,服务器是其它公司做的,我只做客户端,如果都用Unicode,那对方校码失败.我想可能是双字节的问题.但如果用ascii是肯定不能传汉字的.
我全都传英文则没问题.因服务器是别人公司的,且已接入了多个客户端,不能改了.
服务器是用VC写的,是怎么处理汉字的?请大家帮忙,怎么传这种有汉字的字串?
(此帖在C#区已发,未果,在此宝地重发,望各位帮忙啊!)

解决方案 »

  1.   

    简单地说:服务器是别人用VC写的,
    我用C#写客户端传数据,含有汉字,怎么编码传对方?如果用ASCII,则是乱码;
    如果用Uicode则英文的也占了两位.
    怎么处理这种传含有汉字的字串?
      

  2.   

    先分析一下!如果服务器认为 ASCII 大于 127是非法字符那你怎传也没用了!
    如果服务器不进行检测,直接显示/存储的话没有问题!谁说ascii不能传汉字的,ASCII 也有汉字编码的,只不过汉字/或其它字符集的第一个ASCII值是大于 127 的ASCII 值。
      

  3.   

    运行一下面代码你就知道了
    char strs[4]={49,0,0,0},tmp;
    *((int*)&strs[1])='王';
    tmp=strs[2];
    strs[2]=strs[1];
    strs[1]=tmp;
    MessageBox(strs);
      

  4.   

    上面的结果说明,在用ASCII 编码时 英文字符占 1 个字节汉字占2个字
      

  5.   

    utf8编码
    http://www.linuxfans.org/nuke/modules.php?name=News&file=article&op=view&sid=1749