为什么的HttpUtility.UrlEncode(HttpUtility.UrlDecode(“%

2019-07-23 05:35发布

我在与其中在下载使用下划线替代所有空格的文件下载的问题。

基本上,我在这里得到了一个问题:

Response.AddHeader("Content-Disposition", 
    "attachment; filename=" + someFileName);

问题是,如果someFileName曾在它的空间,例如“检查这个out.txt”,那么用户将被提示下载“check_this_out.txt”。

我想最好的办法是进行urlencode文件名,所以我尝试

HttpUtility.UrlEncode(someFileName);

但是,它与加号,这难倒我更换的空间。 于是我刚试过

HttpUtility.UrlEncode(HttpUtility.UrlDecode("%20"))

和解码正常工作,并给了我一个空间,但编码占用空间,然后再次给我加号。

缺少什么我在这里,这是正确的? 如果是这样,我应该怎么正确编码空间为20%的,这正是我所需要的。

Answer 1:

从引用此链接

我遇到这个自己。 如果你能够改变的空间,以20多岁的%IE7,然后将它们正确地转换。 火狐虽然将他们从字面上看(至少使用时的Content-disposition头),所以你需要从只有IE7要求做到这一点。

我们确实在我们的应用程序如下。 (一个Tomcat基于文档储存库)

 String userAgent = request.getHeader("User-Agent"); if (userAgent.contains("MSIE 7.0")) { filename = filename.replace(" ", "%20"); } response.addHeader("Content-disposition", "attachment;filename=\"" + filename + "\""); 


Answer 2:

基本上都%20和+是编码的空间的有效方式。 显然,以UrlEncode方法有所回暖的选项之一 ...如果它选择做其他的方式,别人会问,为什么UrlEncode(UrlDecode("+"))返回“%20” ...

你总是可以对其进行编码,然后只是做一个直串的“+”为“%20”代替。 我认为这工作...



Answer 3:

我想最好的办法是进行urlencode文件名

这不是放出来的带外字符的头参数,如内容处置文件名以正确的方式,并且仅适用(有时)在IE中因错误。 其实这是一个有点长期存在的问题的: 没有正确的方式 。

如果您需要将特殊字符的文件名下载,你不能用内容配置文件名做可靠。 相反,忽略从内容处置,附件标题中的“文件名”参数,并留下你想要的文件名的URL的后一部分。 在没有文件名参数的浏览器会把它从URL路径,其中URL编码解决特殊字符的正确途径。



Answer 4:

您好我有下载他们在空间中的文件时,也面临着同样的问题。

请看看哪个最好的套房,并给出了完整的答案的链接。

http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download

为了便于理解,我只是添加ASP.net代码是如何来解决这个问题。

string document = @"C:\Documents and Settings\Gopal.Ampolu\My Documents\Downloads\" + "Disciplinary & Grievance Procedures..doc";
string filename = "Disciplinary & Grievance Procedures..doc";

Response.ContentType = mimeType;
Response.AddHeader("Content-Disposition", @"attachment; filename=""" + HttpUtility.UrlDecode(filename) + @"""");
Response.Flush();

从上面可以看到,虽然增加头部的响应,文件名括用双引号。 请确保在“文件名”必须UrlDecode进行解码。



Answer 5:

还有一个选项也有,如果你可以在以下亲密有关Windows修补程序更新现有的客户:

Windows修补程序更新IE的空白问题

这是客户端,因此可能并不适用于所有的情况,但仍然在可行的选项。



文章来源: Why does HttpUtility.UrlEncode(HttpUtility.UrlDecode(“%20”)) return + instead of %20?