有关在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是肯定不能传汉字的.
我全都传英文则没问题.因服务器是别人公司的,且已接入了多个客户端,不能改了.请大家帮忙,怎么传这种有汉字的字串?

解决方案 »

  1.   

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

  2.   

    那说明对方多半是采用MBCS方式,建议还是让他也使用Unicode编码,如果不使用标准的方式,
    即使现在不出问题,以后也会出问题。
      

  3.   

    string Msg1="欢迎登陆服务器";
    byte[] byteM=System.Text.Encoding.GetEncoding("gb2312").GetBytes(Msg1);
      

  4.   

    string Msg1="欢迎你422dd";
    byte[] byteM=System.Text.Encoding.GetEncoding("gb2312").GetBytes(Msg1);

    Response.Write(byteM.Length.ToString());

    Response.Write(System.Text.Encoding.GetEncoding("gb2312").GetString(byteM));
    测试了一下 
    结果:11欢迎你422dd 
    gb2312应该能满足你要求了
      

  5.   

    unicode编码英文字符也是站两位的
      

  6.   

    byte[] byteM=System.Text.Encoding.GetEncoding("gb2312").GetBytes(Msg1);

    Response.Write(byteM.Length.ToString());

    Response.Write(System.Text.Encoding.GetEncoding("gb2312").GetString(byteM));
    ==========================如果发送与接收都是一个人写的话,肯定没问题,传汉字也可以,我测过了.但对方确实能收汉字,但我的的数据如果含字就是问号,我想可能是编码不一致引起的.我想知道在网络编程中,是方法处理的.我原来都是都用双字节编码的方法.
      

  7.   

    System.Text.Encoding.UTF8.GetBytes(str);
      

  8.   

    看了这么久就只有一个人提出用UTF8UTF8编码是.NET里很多类使用的默认编码,而且也是国际规范(GB开头的是中国“国标”规范,别人不一定认识)UTF8偏向西文字符,但是也支持中文、阿拉伯文等世界字符。用UTF8编码西文跟用ASCII编码西文是一样的,每个字符都只占一个字节但是中文文字就要占到3个字节了所以,看清楚要求。如果西文占多数,就用UTF8传。中文占多数,就用Unicode传。--------另外,你提到别人的公司拥有服务器,那就需要问清楚他们的编码如果他们不知道编码,那一般来说就是ANSI,使用中文Windows自带的ANSI->中文的映射(也就是GB2312/GB18030)。这时候你就用 GB18030 编码吧。GB18030 是 GB2312 的扩充,也叫“大字库”,“GBK”