不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
HttpUtility.UrlEncode将空格转换成加号引发的问题
编辑:dnawo 日期:2009-06-17
在用 ASP.Net 开发页面的时候,我们常常通过 System.Web.HttpUtility.UrlEncode 和 UrlDecode 在页面间通过 URL 传递参数,成对的使用 Encode 和 Decode 是没有问题的。
但是,我们在编写文件下载的页面的时候,常常用如下方法来指定下载的文件的名称:
之所以转换成 UTF8 是为了支持中文文件名。
这时候问题就来了,因为 HttpUtility.UrlEncode 在 Encode 的时候,将空格转换成加号(+),在 Decode 的时候将加号转为空格,但是浏览器是不能理解加号为空格的,所以如果文件名包含了空格, 在浏览器下载得到的文件,空格就变成了加号(dnawo注:还是能成功下载的,只是原本文件名中的空格下载到本地后成了加号)。
一个解决办法是,在 HttpUtility 的 UrlEncode 之后,将 + 替换成 %20( 如果原来是 + 则被转换成 %2b ),如:
不明白微软为什么要把空格转换成加号而不是 %20。记得 JDK 的 UrlEncoder 是将空格转换成 %20 的。
经检查,在 .Net 2.0 也是这样。
但是,我们在编写文件下载的页面的时候,常常用如下方法来指定下载的文件的名称:
复制内容到剪贴板
程序代码

Response.AddHeader("Content-Disposition","attachment; filename="
+ HttpUtility.UrlEncode(fileName, Encoding.UTF8));
+ HttpUtility.UrlEncode(fileName, Encoding.UTF8));
之所以转换成 UTF8 是为了支持中文文件名。
这时候问题就来了,因为 HttpUtility.UrlEncode 在 Encode 的时候,将空格转换成加号(+),在 Decode 的时候将加号转为空格,但是浏览器是不能理解加号为空格的,所以如果文件名包含了空格, 在浏览器下载得到的文件,空格就变成了加号(dnawo注:还是能成功下载的,只是原本文件名中的空格下载到本地后成了加号)。
一个解决办法是,在 HttpUtility 的 UrlEncode 之后,将 + 替换成 %20( 如果原来是 + 则被转换成 %2b ),如:
复制内容到剪贴板
程序代码

fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
fileName = fileName.Replace("+", "%20");
fileName = fileName.Replace("+", "%20");
不明白微软为什么要把空格转换成加号而不是 %20。记得 JDK 的 UrlEncoder 是将空格转换成 %20 的。
经检查,在 .Net 2.0 也是这样。






评论: 0 | 引用: 0 | 查看次数: 7256
发表评论
请登录后再发表评论!