Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java URLEncoder.encode()和一个空格?_Java_Urlencode - Fatal编程技术网

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类型”