在对url进行编码时,该用哪一个?这两都使用上有什么区别吗?
测试:
输出:
原数据:文件上(传)篇.doc
server.urlencode:%ce%c4%bc%fe%c9%cf%a3%a8%b4%ab%a3%a9%c6%aa.doc
server.urldecode:文件上(传)篇.doc
httputility.urlencode:%e6%96%87%e4%bb%b6%e4%b8%8a%ef%bc%88%e4%bc%a0%ef%bc%89%e7%af%87.doc
httputility.urldecode:文件上(传)篇.doc
区别在于:httputility.urlencode()默认是以utf8对url进行编码,而server.urlencode()则以默认的编码对url进行编码。
在用 asp.net 开发页面的时候, 我们常常通过 system.web.httputility.urlencode 和 urldecode 在页面间通过 url 传递参数. 成对的使用 encode 和 decode 是没有问题的.
但是, 我们在编写文件下载的页面的时候, 常常用如下方法来指定下载的文件的名称:
之所以转换成 utf8 是为了支持中文文件名.
这 时候问题就来了, 因为 httputility.urlencode 在 encode 的时候, 将空格转换成加号('+'), 在 decode 的时候将加号转为空格, 但是浏览器是不能理解加号为空格的, 所以如果文件名包含了空格, 在浏览器下载得到的文件, 空格就变成了加号.
一个解决办法是, 在 httputility 的 urlencode 之后, 将 "+" 替换成 "%20"( 如果原来是 "+" 则被转换成 "%2b" ) , 如:
不明白微软为什么要把空格转换成加号而不是"%20". 记得 jdk 的 urlencoder 是将空格转换成 "%20"的.
经检查, 在 .net 2.0 也是这样.
上面是从别的地方拷贝的,写得很好,我自己的一个程序中也遇到同样的问题,默认aspx是以utf-8为编码的,在我这个程序中必须用gb2312为默认编码
(<globalization requestencoding="gb2312" responseencoding="gb2312"/>),
问 题出现了,以前没有问题的httputility.urldecode在page.request回的值是乱码这就是上面说的 httputility.urldecode默认以utf8对url进行编码,这种情况下面只需将httputility.urldecode改成 server.urlencode即可。