asp.net query string 及 form data 遇到的編碼問題

當遇到此問題時,腦海裏閃過的第一個解決方案是設置 web.config 的編碼。但一想,就某一個頁面的需求而致使其餘跟着妥協,不是好的解決方案。因而網上搜索答案,下面作個小分享,遺憾的是研究不夠深刻,只解決了query string 的問題,而 form data 問題用了修改 web.config 解決。
 
使用 request.QeryString.Get("") 得到的 value,已經不是 url 原生(raw)的值了,而是通過轉碼 UrlDecode 的值。
使用的編碼方式:
一、來自 web.config
1 <system.web>
2     <globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="utf-8" responseHeaderEncoding="utf-8" />
3 </system.web>
二、若是沒有配置,則使用 utf-8,通常狀況是沒問題的。可是若是 query string 是 gb2312 編碼則會出現問題,永遠獲取的是亂碼。
 
針對 GET query string 解決辦法:
先得到原生的 Query,而後用 gb2312 解碼
 1 var queryStrings = Request.Url == null
 2                 ? Request.QueryString
 3                 : HttpUtility.ParseQueryString(Request.Url.Query, Encoding.GetEncoding("GB2312"));
 4  
 5 var value = queryStrings[key];
 6  
 7 private string Decode(string value)
 8 {
 9       var utf8 = Encoding.UTF8;
10       var decode = HttpUtility.UrlDecode(value.ToUpper(), utf8);
11       var encode = (HttpUtility.UrlEncode(decode, utf8) ?? string.Empty).ToUpper();
12       var encoding = (value == encode) ? Encoding.UTF8 : Encoding.GetEncoding("GB2312");
13 
14         return HttpUtility.UrlDecode(value, encoding);
15 }
 
針對 POST form 的解決辦法:
(x-www-form-urlencoded 方式,已知數據值有 gb2312 編碼(如,%D4%C1UTEST13 = 粵UTEST13))
也許狀況和 query string 同樣,request.form 得到的時候是已經編碼過了
 
目前只想到一種解決方法,修改該 web.config:
一、來自 web.config
1 <system.web>
2     <globalization requestEncoding="gb2312" responseEncoding="gb2312"  />
3 </system.web>
相關文章
相關標籤/搜索