今天項目需要向asp的客戶url Post數(shù)據(jù),可是url中文就是不行. 搞了一個下午是asp 和asp.net 的url編碼不一樣的事:
先看下面兩個Url,他們傳遞的參數(shù)一樣么?
aaa.aspx?tag=.net%bc%bc%ca%f5
aaa.aspx?tag=.net%e6%8a%80%e6%9c%af
看起來好像是不一樣,其實他們都是對".net技術(shù)"進行了UrlEncode,不過一個是GB2312的編碼,一個是Utf-8的編碼。
如下代碼就可以獲得上面的編碼后效果:
string tmp1 = System.Web.HttpUtility.UrlEncode(".net技術(shù)", System.Text.Encoding.GetEncoding("GB2312"));
string tmp2 = System.Web.HttpUtility.UrlEncode(".net技術(shù)", System.Text.Encoding.UTF8);
我們實際的Web頁面,可能會被其他程序調(diào)用。
比如:簡體中文操作系統(tǒng)上的一個ASP頁面,需要向一個ASP.net頁面?zhèn)鬟f一個帶中文的參數(shù)。
默認(rèn)情況下,簡體中文操作系統(tǒng)上, ASP 的 Server.UrlEncode 方法會把中文以GB2312的編碼進行編碼,
但是默認(rèn)情況下,ASP.net的頁面是采用的UTF-8編碼。
這種情況下,你在用 Request.QueryString["Tag"] 接受值的時候會接受不到中文信息,單步調(diào)試看到的是亂碼。
這時候雖然用Request.QueryString["Tag"] 接受的是亂碼,但這時候的Url并不是亂碼。
解決方法就是自己分析Url中的參數(shù),然后對參數(shù)的值按照 GB2312的編碼反解密,而不是用.net 默認(rèn)的Utf-8的編碼反解密。
還有:.net 中有Server.UrlEncode()與System.Web.HttpUtility.UrlEncode() 都可以編碼.
區(qū)別在于:HttpUtility.UrlEncode()默認(rèn)是以UTF8對URL進行編碼,而Server.UrlEncode()則以默認(rèn)的編碼(頁面編碼一般為utf-8)對URL進行編碼。
c#asp.net url 傳遞中文參數(shù)要使用 System.Web.HttpUtility.UrlEncode 而不能使用Server.UrlEncode !!!
默認(rèn)aspx是以utf-8為編碼的,在我這個程序中必須用gb2312為默認(rèn)編碼
(<globalization requestEncoding="gb2312" responseEncoding="gb2312"/>)