最近遇到一编码问题,关于淘宝的我在淘宝网首页中的搜索中输入“假发”,然后点搜索,地址栏会变成如下:http://s.taobao.com/search?q=%BC%D9%B7%A2&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&initiative_id=tbindexz_20120717关键词“假发”变成了“%BC%D9%B7%A2”,这是GBK编码。现在我做个测试,我新建两个页面,分别是A.aspx和B.aspx首先在A.aspx的Page_Load事件中写
 Response.Redirect("B.aspx?q=%BC%D9%B7%A2");然后在B.aspx的Page_Load事件中写
Response.Write(Request.QueryString["q"]);在B.aspx中接收的参数Request.QueryString["q"]始终是乱码,随便怎么弄都是乱码我就是想请教一下,如何才能正确接收参数,就是接收的参数不是乱码,即“假发”。提前是Web.config中的globalization我不想改成GBK编码

解决方案 »

  1.   

    @liuqian4243
    你是说只能在web.config中改编码了?
      

  2.   

    得事先知道编码,接收的时候进行解码即可。HttpUtility.UrlDecode(Request.QueryString["q"], Encoding.GetEncoding("GBK"));HttpUtility.UrlDecode(Request.QueryString["q"], Encoding.GetEncoding("GB2312"));都试试。
      

  3.   

    http://blog.csdn.net/wuhen8/article/details/6569871
      

  4.   

    用HttpUtility.UrlDecode 第二个参数是编码string res = HttpUtility.UrlDecode("?q=%BC%D9%B7%A2", encoding);Request.QuaryString已经是解码过的了,因此不要使用它。
    用Request.ServerVariables["QUERY_STRING"] 自己分割参数。
    类似于这样:
    System.Text.Encoding encoding  = System.Text.Encoding.GetEncoding(936);            string paras = Request.ServerVariables["QUERY_STRING"];            if (!string.IsNullOrEmpty(paras))
                {
                    string[] parsedParas = paras.Split(new char[]{'=','&', '?' });
                    for (int i = 0; i < parsedParas.Count(); i += 2)
                    {
                        string res = HttpUtility.UrlDecode(parsedParas[i+1], encoding);
                        Response.Write(res);
                    }
                }