我的服务器上有一个名为:
的资源some image.png
名字中有一个空格。当我在浏览器中输入网址(chrome)时,它会将空间转换为%20:
some%20.png
当我从我的应用程序中使用URLEncoder.encode(“some image.png”)时,我得到了:
some+image.png
导致404.编码的正确方法是什么?
答案 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”都应该有效,但如果“+”没有,我认为你必须手动更换。