莱芜十七中网站,wordpress用插件备份,青岛市北区核酸检测,wordpress注册不跳转正常的情况下#xff0c;现在asp.net的网站很多都直接使用UTF8来进行页面编码的#xff0c;这与Javascript、缺省网站的编码是相同的#xff0c;但是也有相当一部分采用GB2312。对于GB2312的网站如果直接用javascript进行ajax数据提交#xff0c;例如#xff1a;http://ww…正常的情况下现在asp.net的网站很多都直接使用UTF8来进行页面编码的这与Javascript、缺省网站的编码是相同的但是也有相当一部分采用GB2312。 对于GB2312的网站如果直接用javascript进行ajax数据提交例如http://www.xxx.com/accept.aspx?name张三或者说在UTF8的网站上用以下ASP.net的代码进行提交也是不行的。WebRequest request WebRequest.Create(http://www.xxx.com/accept.aspx?name张三); request.Method POST; HttpWebResponse response (HttpWebResponse)request.GetResponse(); 这样在GB2312编码的网站下得到Request.QueryString[name]是乱码MS已经把编码转换这块封装好了。 在UTF8编码通讯和GB2312网站通讯方式下的编码转换方式有很多种实现 第一种首先对要传输的字符进行UrlEncode这种编码后的字符在解码时用UTF8编码方式进行手工解码这样保证结果一致即使传输给的目标页面时GB2312结果都是一样的解码方式如下代码。HttpUtility.UrlDecode(s, Encoding.UTF8); 这样可以得到正确的张三这要求在提交的时候先进行HttpUtility.UrlEncode编码成UTF8先然后再放到name(编码后的字符)这也是目前比较常用和普遍的解决方式只是缺点有一个就是要告诉别人你先怎么怎么Url编码先然后再怎么怎么。 第二种比较另类一些直接读取客户端提交的字节数据进行转换之所以Request.QueryString[name]会是乱码是MS根据当前页面的编码进行转换导致的例如当前页面编码是GB2312而人家提交的是UTF8你没用人家提交的UTF8编码转当然是乱码并不是人家传过来就是乱码。这时我们需要得到原始数据进行重新解码非常遗憾的是我并没有找到直接提供头部原始字节数据方法给我们用没关系解剖下MS的源代码发现代码如下 public NameValueCollection QueryString { get { if (_queryString null) { _queryString new HttpValueCollection(); if (_wr ! null) FillInQueryStringCollection(); _queryString.MakeReadOnly(); } if (_flags[needToValidateQueryString]) { _flags.Clear(needToValidateQueryString); ValidateNameValueCollection(_queryString, Request.QueryString); } return _queryString; } }private void FillInQueryStringCollection(){ byte[] queryStringBytes this.QueryStringBytes; if (queryStringBytes ! null) { if (queryStringBytes.Length ! 0) { this._queryString.FillFromEncodedBytes(queryStringBytes, this.QueryStringEncoding); } } else if (!string.IsNullOrEmpty(this.QueryStringText)) { this._queryString.FillFromString(this.QueryStringText, true, this.QueryStringEncoding); }}顺便说一下QueryString是在第一次被访问时才初始化的如果你的程序中没有用到它那个这个对象会一直保持空值MS考虑了细节 大家都看到了QueryStringBytes属性原型如下internal byte[] QueryStringBytes这个就是原始的QueryString字节了。出招了Type type Request.GetType(); PropertyInfo property type.GetProperty(QueryStringBytes, BindingFlags.Instance | BindingFlags.IgnoreCase | BindingFlags.NonPublic); byte[] queryBytes (byte[])property.GetValue(Request, null); string querystring HttpUtility.UrlDecode(queryBytes, Encoding.UTF8); 再看看querystring是什么哈哈name张三。 各种编码的转换都可以自己完成毕竟得到提交的原始字节了希望对大家有所帮助。转载于:https://www.cnblogs.com/zhujiechang/archive/2009/07/25/1530878.html