但是,我们在编写文件下载的页面的时候,常常用如下方法来指定下载的文件的名称:
Response.AddHeader("Content-Disposition","attachment; filename="
+ 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");不明白微软为什么要把空格转换成加号而不是 %20。记得 JDK 的 UrlEncoder 是将空格转换成 %20 的。
经检查,在 .Net 2.0 也是这样。
评论(0)
暂无评论。