今天遇到了这样一个问题,我在winform中调用url可是怎么传也是乱码,不知道怎么回事,代码如下,由于是刚刚接触c#还不太了解,望达人赐教,问题解决了可以加分哦!
//字符编码转换
        public String utfTogb(String str)
        {
            try
            {
                String endStr;
                String result;
                System.Text.UnicodeEncoding unicodi = new UnicodeEncoding();
                System.Text.Encoding gb2312 = System.Text.Encoding.GetEncoding("gb2312");
                //Encoding utf8 = Encoding.GetEncoding(65001);
                //Encoding gb2312 = Encoding.GetEncoding("gb2312");
                byte[] tempStr = unicodi.GetBytes(str);
                byte[] targetStr = Encoding.Convert(unicodi, gb2312, tempStr);
                endStr = gb2312.GetString(targetStr);
                MessageBox.Show(endStr);
                result = System.Web.HttpUtility.UrlDecode(endStr);
                MessageBox.Show(result);
                return result;
            }
            catch(Exception e){
                MessageBox.Show(e.ToString());
                return null;
            }        }
        private void button1_Click(object sender, EventArgs e)
        {
            String str;
            WebRequest request = WebRequest.Create("http://agent.net/content="+this.utfTogb("你好"));
            //HttpWebResponse rep = (HttpWebResponse)request.GetResponse();
            WebResponse response = request.GetResponse();
            Stream resStream = response.GetResponseStream();
            StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);
            label4.Text = utfTogb("你好!");
            str = utfTogb(sr.ReadToEnd().ToString());
            label1.Text = str;
            resStream.Close();
            sr.Close();
        }
希望达人帮忙看下这段代码哪有问题,项目进行中,期待解决办法。

解决方案 »

  1.   

    "*content=" + HttpUtility.urlencode("...");label1.text = Encoding.utf8.getString(encoding.getencoding(936).getbytes(responsestr));试试看..
      

  2.   

    谢谢您的回复,可还是不行呢。这是个给手机发短信的,现在是发到服务器上的时候就是乱码,问题应该还是出在WebRequest request = WebRequest.Create("http://agent.net/content="+this.utfTogb("你好")); 这句话上吧,上面的方法试过了还是乱码
      

  3.   

    unicode和asci码编码方式不一样,unicode采用两个字节表示一个字符,而asci用一个字节表示一个字符,因此,遇到比如说汉字的时候,采用asci编码就会出现乱码现象。
      

  4.   

    1. WebRequest request = WebRequest.Create("http://agent.net/content="+this.utfTogb("你好")); 
    这里URL有问题 ,http://agent.net/content= 没有这种写法2. +this.utfTogb("你好") 在URL中不要转GB2313, 可以用 HttpUtility.urlencode("..."); 说明一下,其实C#默认是就可以显示中文的。
      

  5.   

    private void button1_Click(object sender, EventArgs e)
            {
                String str;
                WebRequest request = WebRequest.Create("http://agent.bucp.net/websend/z_send.aspx?content="+HttpUtility.UrlEncode("你好"));
                //HttpWebResponse rep = (HttpWebResponse)request.GetResponse();
                WebResponse response = request.GetResponse();
                Stream resStream = response.GetResponseStream();
                StreamReader sr = new StreamReader(resStream, System.Text.Encoding.Default);
                str = sr.ReadToEnd().ToString();
                Console.WriteLine(str);
                label1.Text = str;            resStream.Close();
                sr.Close();
            }
    这样在服务器上接收的时候就是乱码的,望有达人赐教。
      

  6.   

    引用 System.Web
    url = System.Web.HttpUtility.UrlEncode(url, System.Text.Encoding.GetEncoding("gb2312"));
      

  7.   

    url = System.Web.HttpUtility.UrlEncode(url, System.Text.Encoding.GetEncoding("gb2312"));
    在winform中使用手机发短信和发邮件我都试过,可以