Java URLEncoder.encode()和一个空格?
我的服务器上有一个名为:Java URLEncoder.encode()和一个空格?,java,urlencode,Java,Urlencode,我的服务器上有一个名为: some image.png 名字里有个空格。当我在浏览器(chrome)中键入url时,它将空间转换为%20: some%20.png 当我从应用程序中使用URLEncoder.encode(“some image.png”)时,我得到: some+image.png 这会导致404。什么是正确的编码方式? 请注意,由于该字符非常常用,因此保留了一个特殊代码(“+”符号)作为其URL编码。因此,字符串“ab”可以URL编码为“A%20B”或“A+B” 但是,您的
some image.png
名字里有个空格。当我在浏览器(chrome)中键入url时,它将空间转换为%20:
some%20.png
当我从应用程序中使用URLEncoder.encode(“some image.png”)时,我得到:
some+image.png
这会导致404。什么是正确的编码方式?
请注意,由于该字符非常常用,因此保留了一个特殊代码(“+”符号)作为其URL编码。因此,字符串“ab”可以URL编码为“A%20B”或“A+B”
但是,您的代码可能会失败,因为某些解析器/web服务器对基本URL部分的处理不尽相同,并且只识别查询字符串部分中的
+=space
,可能不是最佳解决方案,但您可以使用path.replace(“,“%20”)
如前所述,“+”和“%20”都应该工作,但如果“+”不工作,我认为您必须手动进行替换。IIRC,
+
和%20
都是URL中的有效字符串
在路径中,URL的+
部分没有保留[1],因此没有特殊意义,不需要进行编码。因此,+
字面意思是URL路径部分的+
字符
在查询中,URL的+
部分是保留的[2],尽管没有说明目的
但是,当使用HTML表单时,MIME编码application/x-www-form-urlencoded
用于对参数进行编码,这些参数(在HTTP GET请求中)包含在URL[3]的查询部分中
默认情况下使用的编码基于通用URI百分比编码规则的早期版本,并进行了一些修改,例如换行符规范化和将空格替换为“+”而不是“%20”。
[3]
资料来源:
[1] 第3.3节
[2] 第3.4节
[3] “应用程序/x-www-form-urlencoded类型”