为什么Firefox不会将%20转换为空格('')?

问题描述:

我正在向浏览器发送一个用文件名保存文件的请求。 文件名可能包含空格,所以我用%20替换所有空格。 Internet Explorer和Chrome将%20转移回空格,但Firefox不会。为什么? 有没有办法让所有浏览器显示空间?为什么Firefox不会将%20转换为空格('')?

这是我的代码:

String codedName = new String(URLEncoder.encode(name, "UTF-8")); 
codedName = codedName.replaceAll("\\+", "%20"); 
response.setHeader("Content-Disposition", "attachment; filename=\"" + codedName+ "\""); 
+1

你为什么改变encode()的结果? +是URL中空间的常规代码。 – PhiLho 2010-08-25 09:40:08

+0

是的。但是我越来越多地看到使用%20而不是+,这很奇怪。 – 2011-02-28 07:42:18

这取决于你如何创建文件名。通常,您可以简单地在标题字段中设置文件名,框架将对其进行正确编码。在你的情况下,你似乎编了两次这个名字。尝试不编码它。

您可以使用Javascript来编码网址。

的语法编码的URL在JavaScript是:

encodeURI(uri) 

所以,代码如下:(注意空间之间测试

<script type="text/javascript"> 

var uri="my test.html?name=jason&age=25"; 
document.write(encodeURI(uri)+ "<br />"); 

</script> 

其结果如下:

my%20test.html?name=jason&age=25 

根据您最近的评论“我如何在Java中完成它?”

语法将是这样的:

encode(String s) 

一个简单的谷歌搜索会透露更多的信息。