最近在Web程序中遇到url编码问题,对于中文会出现乱码,困扰了我半天,在网上查了一下相关资料,自己也测试了一下:

string str0, str1, str2, str3, o1, o2, o3, o4;

//str0 和str1 结果是一样,页默认用utf-8进行编码
str0 = Server.UrlEncode("广东省"); //'%e5%b9%bf%e4%b8%9c%e7%9c%81
str1 = HttpUtility.UrlEncode("广东省");//%e5%b9%bf%e4%b8%9c%e7%9c%81

//用gb2312 进行编码
str2 = HttpUtility.UrlEncode("广东省", Encoding.GetEncoding("gb2312"));//%b9%e3%b6%ab%ca%a1

//用gb2312 对 str2 进行解码
o1 = HttpUtility.UrlDecode(str2, Encoding.GetEncoding("GB2312"));//广东省

//用utf-8 对 str0或str1 进行解码

o2 = HttpUtility.UrlDecode(str0, Encoding.GetEncoding("utf-8"));//广东省

//可以从NameValueCollection集合中获取查询字符串

NameValueCollection parames = HttpUtility.ParseQueryString(Request.Url.Query, Encoding.GetEncoding("utf-8"));
p = parames.Get("p");

//不同浏览器默认url编码可能不一样,有时用服务器端方法可能可以避免对不同浏览器进行编程.

if (Page.Request.Browser.Browser == "Firefox")
                    {
                        p = HttpUtility.UrlDecode(Request.QueryString["p"], Encoding.GetEncoding("GB2312"));//Firefox
                    }
                    else if (Page.Request.Browser.Browser == "IE")
                    {//litScript.Text = "<script type='text/javascript'>alert('IE');</script>";
                        string bv = Page.Request.Browser.Version;
                        if (Page.Request.Browser.Version == "6.0")
                        {
                            p = HttpUtility.UrlEncode(Request.QueryString["p"], Encoding.GetEncoding("utf-8"));
                            p = HttpUtility.UrlDecode(p, Encoding.GetEncoding("GB2312"));
                        }
                        else
                        {
                            p = Request.QueryString["p"];
                        }
                    }

相关文章: