今年五一出现的WAP编码问题,和去年出现的雷同,只是到目前还没有找到正确的解码方式。到目前追踪下来的结果发现将“川”从客户端转到服务端成了“Y]”(PS:但这个追踪是有错误的,下面我会谈到在追踪过程中,发现的一些.NET的处理方式)。
我在机器上做了一个实验:(k=中国)
PageA 发送按gb2312编码的 k= %d6%d0%b9%fa
PageB 接收到k 按默认的UTF-8解码。很自然结果就是乱码:"й"
这是我特意制造的乱码,但让我奇怪的是.NET的Request中几个获得Query参数的结果却是不同的。
从1、2、3中方法中看k的三种不同的值,
1:“k= %d6%d0%b9%fa”是客户端传输过来的编码值。
2:“k=%u0439”目前不清楚如何得到这个值(PS:有知道的请告知一下,Reflector也懒得看啦)。
3:"k=й" 就是通过Server.UrlDeCode的错误解码结果。
这说明了什么呢
1:我们平时使用的Request.QueryString["k"]内部已经对URL参数进行了解码,这就是为什么平时我们多用Server.UrlEncode对参数进行编码,而很少显示的去调用Server.UrlDeCode对参数进行解码。
2:要获取更底层的参数形式请使用Request.Url.OriginalString 和 Request.QueryString.ToString() (PS:比较郁闷这个是.NET2.0的,OriginalString 是2.0新增的。在.NET1.1 请使用这个:Request.Url.AbsoluteUri)
3:我要改写跟踪代码,因为我获得的“Y]”已经是被MS处理的乱码了。
问题先跟踪到这,目前还没有好的解决办法。
--=阅读快乐=--
欢迎访问我的新鱼塘 www.pumaboyd.com