URLEncoder.encode()和空格?

我的服务器上有一个名为的资源:

some image.png 

名字中有一个空格。 当我在浏览器中键入url(chrome)时,它会将空间转换为%20:

 some%20.png 

当我从我的应用程序中使用URLEncoder.encode(“some image.png”)时,我得到:

 some+image.png 

导致404.编码的正确方法是什么?

http://www.permadi.com/tutorial/urlEncoding/

请注意,由于该字符非常常用,因此将特殊代码(“+”符号)保留为其URL编码。 因此,字符串“AB”可以URL编码为“A%20B”或“A + B”

但是,您的代码可能会失败,因为一些解析器/ Web服务器不会对基本URL部分同等地处理它们 – 并且只识别查询字符串部分中的+ = space

IIRC, +%20都是URL中的有效字符串。

在URL +的路径部分没有保留[1],因此没有特殊含义,也不需要%-encoded。 因此, +表示URL的路径部分中的+字符。

在URL的查询部分保留[2],虽然目的没有说明。

但是,在使用HTML表单时,MIME编码application/x-www-form-urlencoded用于编码(在HTTP GET请求中)包含在URL [3]的查询部分中的参数。

默认情况下使用的编码基于一般URI百分比编码规则的早期版本,具有许多修改,例如换行标准化和用“+”而不是“%20”替换空格。 [3]

资料来源:

http://www.ietf.org/rfc/rfc2396.txt

[1]第3.3节

[2]第3.4节

http://en.wikipedia.org/wiki/Percent-encoding

[3]“应用程序/ x-www-form-urlencoded类型”

可能不是最佳解决方案,但您可以使用path.replace(“”,“%20”)。

如前所述,“+”和“%20”都应该有效,但如果“+”没有,我认为你必须进行手动更换。