none
关于客户端GET提交参数乱码问题 RRS feed

  • 问题

  •   不行了,搞到现在也没能搞定,大大们帮帮忙吧。

    客户端EXE  是一个提交  参数的程序

    GET函数如下

     

    /// <summary>
            /// Get通讯函数
            /// </summary>
            /// <param name="url">请求Url</param>
            /// <param name="para">请求参数</param>
            /// <returns>页面返回值</returns>
            public static string SendGetRequest(string url, string para)
            {
                string strResult = "";
                try
                {
                    Encoding myEncoding = Encoding.GetEncoding("gb2312");
                    string address = (url + para); 
                    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(address); 
                    req.Method = "GET"; 
                    using (WebResponse wr = req.GetResponse()) 
                    {
                        Stream stream = wr.GetResponseStream();
                        StreamReader sr = new StreamReader(stream, myEncoding);
                        strResult = sr.ReadToEnd();
                    }
                }
                catch (System.UriFormatException ex)
                {
                    return ex.Message;
                }
                return strResult;
            }

    服务端为gb2312  接收,由于本地提交的数据中包含汉字,所以出现了纠结的问题,客户端 不能Server.UrlDecode,因为服务器端没有Server.UrlEncode来解码,是直接Request.QueryString的,调试服务端发现获取到的汉字都是乱码, 由于所有的参数参与了MD5运算,所以这个问题必须解决!通讯函数的编码,我都用尽了,。。。还是处理不了!

    环境:服务端 通过 gb2312 接收数据(web.config配置的)

    客户端  需要提交包含汉字的数据 , 现在的问题是,我无法修改服务端 来做什么UrlDecode,所以只能想办法在客户端解决,各位大大支招吧!

    2010年6月4日 16:44

答案

全部回复

  • 你确定你服务端是GB2312?,用utf8测试一下?

    可以base64么?

     


    family as water
    2010年6月5日 2:33
  • 回楼上,肯定是GB2312 

     

    服务端  .net 4.0  web.config 

     

    <?xml version="1.0"?>
    <configuration>
     <system.web>
      <compilation debug="true" targetFramework="4.0"/>
      <globalization fileEncoding="gb2312" requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN"/>
     </system.web>
    </configuration>

     

    客户端只能想办法让服务端接收的不是乱码,因为不能更改服务端!服务端在我这里,但是为了一些兼容性和其他问题,不能对服务端做任何修改!

    服务端我调试过了,Request.Url.ToString(); 获取到的是正常的中文!对单个参数进行获取就乱码了!

    2010年6月5日 2:45
  • 对了!想起一个事情,我的项目,根目录使用的web.config 是utf-8 <globalization requestEncoding="utf-8" responseEncoding="utf-8"/> 我那个接收的文件是一个子目录的,由于编码不同,所以单独建立了一个web.config 这个在2.0里面是可以正常使用的,会不会是4.0已经不支持这样操作了!
    2010年6月5日 2:59
  • 应该是支持的。

    你客户端为什么不能encode,一般汉字都会先编码的,你看看baidu和goodle都会处理的。


    Microsoft Online Community Support
    2010年6月7日 3:36
  • 编码是UrlEncode,解密是UrlDecode,看你的描述好像你自己搞反了。


    【孟子E章】
    2010年6月7日 3:36
    版主