原来我的程序客户端是C++控制台的,做的事情就是连接到服务器之后等待从服务器接受数据,接到之后处理并回传结果,然后循环等待。传输的数据是中文字符串,用char数组存的。现在做个C#的客户端,但是不太会用TcpClient类,照着msdn的代码写了一段private void button1_Click(object sender, EventArgs e)
        {
            client = new TcpClient("127.0.0.1", 4001);
            byte[] data = new byte[1024];
            NetworkStream stream = client.GetStream();
            Int32 bytes = stream.Read(data, 0, data.Length);
            string responsedata = string.Empty;
            
            data= Encoding.Convert(Encoding.ASCII, Encoding.Unicode, data);
            responsedata = Encoding.Unicode.GetString(data);
            textBox1.Text = responsedata;
        }然后texBox1里面显示的都是?????????求教大神们,教教小弟吧~~

解决方案 »

  1.   

    字符串是有编码的,中文字符串不是ascii,只是和ascii兼容而已,
      

  2.   

    首先,data数组中只有前边bytes 和字节有用,你不能在之后去使用整个data数组,你只应该处理前bytes 个字节。其次,你的 data= Encoding.Convert(Encoding.ASCII, Encoding.Unicode, data); 
    responsedata = Encoding.Unicode.GetString(data);这两句,是把data按照ASCII方式转换为字符串,然后把它转换为 Unicode字节数组,然后又把它转换为Unicode字符串。这是多余的。直接写 Encoding.Unicode.GetString(....)这一行代码就行了。第三,你要搞清楚,对方发送来的是不是ASCII编码的内容。
      

  3.   

    绝对是编码问题,即使是ASCII,也可能是双字节或单字节的编码方式,需要首先确定编码方式再转换