欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

从数据库中读取字符串时其中的空格变成加号

程序员文章站 2022-04-30 10:49:52
...

HttpUtility.UrlEncode 在 Encode 的时候, 将空转换成加号(''), 在 Decode 的时候将加号转为空, 但是浏览器是不能理解加号为空的, 所以如果文件名包含了空, 在浏览器下载得到的文件, 空就变成了加号。 在用 ASP.Net 开发页面的时候, 我们常常通过 System.Web

HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号('+'), 在 Decode 的时候将加号转为空格, 但是浏览器是不能理解加号为空格的, 所以如果文件名包含了空格, 在浏览器下载得到的文件, 空格就变成了加号。

在用 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");