asp.net中的url编码解码(转)

在对url进行编码时,该用哪一个?这两都使用上有什么区别吗?
测试:

string file="文件上(传)篇.doc";
string server_urlencode=server.urlencode(file);
string server_urldecode=server.urldecode(server_urlencode);
string httputility_urlencode=system.web.httputility.urlencode(file);
string httputility_urldecode=system.web.httputility.urldecode(httputility_urlencode);
response.write("原数据:"+file);
sfun.writeline("server.urlencode:"+server_urlencode);
sfun.writeline("server.urldecode:"+server_urldecode);
sfun.writeline("httputility.urlencode:"+httputility_urlencode);
sfun.writeline("httputility.urldecode:"+httputility_urldecode);

输出:
原数据:文件上(传)篇.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 是没有问题的.

但是, 我们在编写文件下载的页面的时候, 常常用如下方法来指定下载的文件的名称:

response.addheader("content-disposition","attachment; filename="
+ httputility.urlencode(filename, encoding.utf8));

之所以转换成 utf8 是为了支持中文文件名.

这 时候问题就来了, 因为 httputility.urlencode 在 encode 的时候, 将空格转换成加号('+'), 在 decode 的时候将加号转为空格, 但是浏览器是不能理解加号为空格的, 所以如果文件名包含了空格, 在浏览器下载得到的文件, 空格就变成了加号.

一个解决办法是, 在 httputility 的 urlencode 之后, 将 "+" 替换成 "%20"( 如果原来是 "+" 则被转换成 "%2b" ) , 如:

filename = httputility.urlencode(filename, encoding.utf8);
filename = filename.replace("+", "%20");

不明白微软为什么要把空格转换成加号而不是"%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即可。地址:http://www.ilcng.com/n143.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值