zoukankan      html  css  js  c++  java
  • asp.net query string 及 form data 遇到的编码问题

    当遇到此问题时,脑海里闪过的第一个解决方案是设置 web.config 的编码。但一想,就某一个页面的需求而导致其他跟着妥协,不是好的解决方案。于是网上搜索答案,下面做个小分享,遗憾的是研究不够深入,只解决了query string 的问题,而 form data 问题用了修改 web.config 解决。
     
    使用 request.QeryString.Get("") 获得的 value,已经不是 url 原生(raw)的值了,而是经过转码 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 是 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:
    1、来自 web.config
    1 <system.web>
    2     <globalization requestEncoding="gb2312" responseEncoding="gb2312"  />
    3 </system.web>
     
     
  • 相关阅读:
    Codeforces 878A
    Codeforces 873B-Balanced Substring
    codeforces 868C
    51nod 1402 最大值(贪心)
    最小正子段和 贪心
    codeforces 819B
    Codeforces 785D
    Codeforces 864E
    863D
    UVA 1380 A Scheduling Problem
  • 原文地址:https://www.cnblogs.com/ranmofang/p/4390192.html
Copyright © 2011-2022 走看看