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”都应该有效,但如果“+”没有,我认为你必须进行手动更换。