解決的方法一般有3種: 1.設(shè)置web.config文件 <system.web> 2.傳遞中文之前,將要傳遞的中文參數(shù)進(jìn)行編碼,在接收時(shí)再進(jìn)行解碼。 string Name = "中文參數(shù)"; >> 進(jìn)行接收 string Name = Request.QueryString["Name"]; 3.如果是從 .HTML 文件向 .Aspx 文件進(jìn)行傳遞中文參數(shù)的話(即不從后臺(tái)用 Redirect()方法進(jìn)行 Url 轉(zhuǎn)換)。一樣要將傳遞的中文參數(shù)進(jìn)行編碼,在接收時(shí)再進(jìn)行解碼。 <script language="JavaScript">
string Name = Request.QueryString["Name"]; Response.Redirect("test1.aspx?111="+System.Web.HttpUtility.UrlEncode(" 中華人明共和國")) ; string message ="http://localhost/Test/test1.aspx?111=%22+System.Web.HttpUtility.UrlEncode(" 中華人明共和國"); http: 轉(zhuǎn)自:http://blog.csdn.net/faunjoe/archive/2009/09/26/4596826.aspx
在對URL進(jìn)行編碼時(shí),該用哪一個(gè)?這兩都使用上有什么區(qū)別嗎?
測試: string file="文件上(傳)篇.doc"; string Server_UrlEncode=Server.UrlEncode(file); string Server_UrlDecode=Server.UrlDecode(Server_UrlEncode); string HttpUtility_UrlEncode=System.Web.HttpUtility.UrlEncode(file); string HttpUtility_UrlDecode=System.Web.HttpUtility.UrlDecode(HttpUtility_UrlEncode); Response.Write("原數(shù)據(jù):"+file); SFun.WriteLine("Server.UrlEncode:"+Server_UrlEncode); SFun.WriteLine("Server.UrlDecode:"+Server_UrlDecode); SFun.WriteLine("HttpUtility.UrlEncode:"+HttpUtility_UrlEncode); SFun.WriteLine("HttpUtility.UrlDecode:"+HttpUtility_UrlDecode); 輸出: 原數(shù)據(jù):文件上(傳)篇.doc Server.UrlEncode:%ce%c4%bc%fe%c9%cf%a3%a8%b4%ab%a3%a9%c6%aa.doc Server.UrlDecode:文件上(傳)篇.doc HttpUtility.UrlEncode:%e6%96%87%e4%bb%b6%e4%b8%8a%ef%bc%88%e4%bc%a0%ef%bc%89%e7%af%87.doc HttpUtility.UrlDecode:文件上(傳)篇.doc 區(qū)別在于:HttpUtility.UrlEncode()默認(rèn)是以UTF8對URL進(jìn)行編碼,而Server.UrlEncode()則以默認(rèn)的編碼對URL進(jìn)行編碼。 在用 ASP.Net 開發(fā)頁面的時(shí)候, 我們常常通過 System.Web.HttpUtility.UrlEncode 和 UrlDecode 在頁面間通過 URL 傳遞參數(shù). 成對的使用 Encode 和 Decode 是沒有問題的. 但是, 我們在編寫文件下載的頁面的時(shí)候, 常常用如下方法來指定下載的文件的名稱: Response.AddHeader("Content-Disposition","attachment; filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8)); 之所以轉(zhuǎn)換成 UTF8 是為了支持中文文件名. 這 時(shí)候問題就來了, 因?yàn)?HttpUtility.UrlEncode 在 Encode 的時(shí)候, 將空格轉(zhuǎn)換成加號(hào)('+'), 在 Decode 的時(shí)候?qū)⒓犹?hào)轉(zhuǎn)為空格, 但是瀏覽器是不能理解加號(hào)為空格的, 所以如果文件名包含了空格, 在瀏覽器下載得到的文件, 空格就變成了加號(hào). 一個(gè)解決辦法是, 在 HttpUtility 的 UrlEncode 之后, 將 "+" 替換成 "%20"( 如果原來是 "+" 則被轉(zhuǎn)換成 "%2b" ) , 如: fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8); fileName = fileName.Replace("+", "%20"); 不明白微軟為什么要把空格轉(zhuǎn)換成加號(hào)而不是"%20". 記得 JDK 的 UrlEncoder 是將空格轉(zhuǎn)換成 "%20"的. 經(jīng)檢查, 在 .Net 2.0 也是這樣. 上面是從別的地方拷貝的,寫得很好,我自己的一個(gè)程序中也遇到同樣的問題,默認(rèn)aspx是以utf-8為編碼的,在我這個(gè)程序中必須用gb2312為默認(rèn)編碼 (<globalization requestEncoding="gb2312" responseEncoding="gb2312"/>), 問題出現(xiàn)了,以前沒有問題的HttpUtility.UrlDecode在Page.Request回的值是亂碼這就是上面說的 HttpUtility.UrlDecode默認(rèn)以UTF8對URL進(jìn)行編碼,這種情況下面只需將HttpUtility.UrlDecode改成 Server.UrlEncode即可。 |
|