URLEncoder.encode()和空格?

时间:2011-02-26 22:05:01

标签: java urlencode

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

的资源
some image.png

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

some%20.png

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

some+image.png

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

3 个答案:

答案 0 :(得分:4)

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

  

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

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

答案 1 :(得分:4)

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

在URL +的路径部分中没有保留[1],因此没有特殊含义,也不需要进行%编码。因此,+字面意思是网址路径部分中的+字符。

在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]“application / x-www-form-urlencoded type”

答案 2 :(得分:0)

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

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