none
获取网页传递的汉字 字符串参数问题 汉字参数乱码 问题 RRS feed

  • 问题

  • http://localhost:2322/Default.aspx?T=扎法法大大大大地%20123
    获取参数 T 出现乱码

    web config 配置:

    <globalization  requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN" />

    如果 web config 设成 requestEncoding、responseEncoding 设置成"gb2312"能够正确地获取 T 参数的值

    有没有不修改  web config  的设置 正确的取得参数 T 的值得方法?

    2008年4月15日 8:52

答案

  • 办法1:
    传递时进行编码 url= "
    http://localhost:2322/Default.aspx?T=" + Server.UrlEncode("扎法法大大大大地%20123 ")

    办法2:试试
    s = System.Web.HttpUtility.UrlDecode(Request.QueryString["t"],System.Text.Encoding.UTF8);或者别的编码
    2008年4月15日 8:59
    版主
  • 我可以提供给你一种方法:

    可以通过System.Text.Encoding的方法来进行编码的转换.以下是我的测试代码:

     

    Code Snippet

            //编码为UTF8,转型成为GB2312

            string s = Request.QueryString["T"];

            byte[] b = System.Text.Encoding.UTF8.GetBytes(s);

            System.Text.Encoding gb = System.Text.Encoding.GetEncoding("GB2312");

            string g = gb.GetString(b);

     

    我在本地测试是没问题的.

    2008年4月15日 9:25
  • 问题解决了  好像大家的 几个方法都可以
    我用的VSTS 2008 内置的IIS 测试  有问题
    在IIS 6.0 上显示是正确的  谢谢大家了 

    每个方法都不失为一个好的解决方案!

    觉得 Asp.net获取参数的时候 在Page_Load 之前就对传入的参数进行了一次编码! 大家可以研究一下

    2008年4月15日 10:18

全部回复

  •  

    Code Snippet

    System.Collections.Specialized.NameValueCollection nv = System.Web.HttpUtility.ParseQueryString(Request.Url.Query, System.Text.Encoding.UTF8);

    string test=nv["T"];

    //T="������������ 123";

     

     

     

    2008年4月15日 8:55
  •  

    Code Snippet

    Encoding GB2312 = Encoding.GetEncoding("gb2312");
    UTF8Encoding UTF8 = new UTF8Encoding();
    string testString = Request.QueryString["T"];
    string result =GB2312.GetString(Encoding.Convert(UTF8,GB2312,UTF8.GetBytes(testString)));

    //result ="???????????? 123"

     

     

    2008年4月15日 8:58
  • 办法1:
    传递时进行编码 url= "
    http://localhost:2322/Default.aspx?T=" + Server.UrlEncode("扎法法大大大大地%20123 ")

    办法2:试试
    s = System.Web.HttpUtility.UrlDecode(Request.QueryString["t"],System.Text.Encoding.UTF8);或者别的编码
    2008年4月15日 8:59
    版主
  • Encoding GB2312 = Encoding.GetEncoding("gb2312");
    Request.ContentEncoding = GB2312;

    Request.QueryString["T"]; //同上

    2008年4月15日 9:00
  • string s = Request.QueryString["t"];
    Response.Write(System.Web.HttpUtility.UrlDecode(s,System.Text.Encoding.BigEndianUnicode));

    目前测试 ,非IE都能正确显示
    2008年4月15日 9:10
    版主
  • 因为 T参数可能是其他页面传递过来的参数  所以不能用 Server.UrlEncode 方法

    ������������ 123

    string s = System.Web.HttpUtility.UrlDecode(Request.QueryString["t"],System.Text.Encoding.UTF8);

    //或gb2312 得到 s = "������������ 123";

    2008年4月15日 9:15
  • 下面即可,但要根据自己的情况调整,或者使用正则

    Code Snippet

    string s = Request.RawUrl.Split('=')[1];
    Response.Write(Server.UrlDecode(s));


    2008年4月15日 9:21
    版主
  • 我可以提供给你一种方法:

    可以通过System.Text.Encoding的方法来进行编码的转换.以下是我的测试代码:

     

    Code Snippet

            //编码为UTF8,转型成为GB2312

            string s = Request.QueryString["T"];

            byte[] b = System.Text.Encoding.UTF8.GetBytes(s);

            System.Text.Encoding gb = System.Text.Encoding.GetEncoding("GB2312");

            string g = gb.GetString(b);

     

    我在本地测试是没问题的.

    2008年4月15日 9:25
  • http://localhost:2322/Default.aspx?T=扎法法大大大大地%20123
    FireFox 浏览器会自动把 汉字转换成Utf-8 来传递给服务器 因此 string s = Request.QueryString["t"]; 得到的值是:"扎法法大大大大地%20123";

    2008年4月15日 9:51
  • http://localhost:2322/Default.aspx?T=扎法法大大大大地%20123

    Code Snippet

    string s = Request.QueryString["T"];//s=������������ 123

    byte[] b = System.Text.Encoding.UTF8.GetBytes(s);

    System.Text.Encoding gb = System.Text.Encoding.GetEncoding("GB2312");

    string g = gb.GetString(b);//g="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 123"

     

    UTF8Encoding UTF8 = new UTF8Encoding();
    b = UTF8.GetBytes(s);
    string result=gb.GetString(b);//同样效果 result="锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷 123"

     

    Web config 设置

    <globalization  requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN" />

     

    Request:

    Request.RawUrl="/Default.aspx?T=扎法法大大大大地%20123";

    Url = {http://localhost:2322/Default.aspx?T=������������ 123}

    Params = {T=%ufffd%ufffd%ufffd%ufffd%ufffd%ufffd%ufffd%ufffd%ufffd%ufffd%ufffd%ufffd+123&ALL_HTTP=HTTP_CONNECTION%3aKeep-Alive%0d%0aHTTP_ACCEPT%3a*%2f*%0d%0aHTTP_ACCEPT_ENCODING%3agzip%2c+deflate%0d%0aHTTP_ACCEPT_LANGUAGE%3azh-cn%0d%0aHTTP_HOST%3alocalhost%3a2322%0d...

     

    2008年4月15日 10:02
  • 问题解决了  好像大家的 几个方法都可以
    我用的VSTS 2008 内置的IIS 测试  有问题
    在IIS 6.0 上显示是正确的  谢谢大家了 

    每个方法都不失为一个好的解决方案!

    觉得 Asp.net获取参数的时候 在Page_Load 之前就对传入的参数进行了一次编码! 大家可以研究一下

    2008年4月15日 10:18