asp.Netquery stringおよびform dataで発生した符号化問題
4764 ワード
この問題に直面したとき、頭の中でフラッシュした最初の解決策はwebを設定することです.configの符号化.しかし、あるページのニーズについて他の妥協を招くのは、良い解決策ではないと思います.そこでネット上で答えを検索して、下で少し分かち合って、残念なことに研究が深くなくて、query stringの問題だけを解決して、form dataの問題はwebを修正しました.config解決.
requestを使用します.QeryString.Get("")で得られたvalueは,url原生の値ではなく,トランスコードUrlDecodeを経た値である.
使用するエンコーディング方法:
1、webから来ました.config
2、構成されていない場合はutf-8を使用しますが、一般的には問題ありません.しかしquery stringがgb 2312符号化であれば問題が発生し、常に乱符号を取得する.
GET query stringの解決方法:
まずオリジナルのQueryを取得し、その後gb 2312で復号する
POST formに対する解決方法:
(x-www-form-urlencoded方式、既知のデータ値はgb 2312符号化(例えば、%D 4%C 1 UTEST 13=広東UTEST 13))
状況はquery stringと同じかもしれないformが得られた時はすでに符号化されていました
現在、このwebを修正する解決策は一つしか考えられていない.config:
1、webから来ました.config
requestを使用します.QeryString.Get("")で得られたvalueは,url原生の値ではなく,トランスコードUrlDecodeを経た値である.
使用するエンコーディング方法:
1、webから来ました.config
1 <system.web>
2 <globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="utf-8" responseHeaderEncoding="utf-8" />
3 </system.web>
2、構成されていない場合はutf-8を使用しますが、一般的には問題ありません.しかしquery stringがgb 2312符号化であれば問題が発生し、常に乱符号を取得する.
GET query stringの解決方法:
まずオリジナルのQueryを取得し、その後gb 2312で復号する
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方式、既知のデータ値はgb 2312符号化(例えば、%D 4%C 1 UTEST 13=広東UTEST 13))
状況はquery stringと同じかもしれないformが得られた時はすでに符号化されていました
現在、このwebを修正する解決策は一つしか考えられていない.config:
1、webから来ました.config
1 <system.web>
2 <globalization requestEncoding="gb2312" responseEncoding="gb2312" />
3 </system.web>