Java URLEncoder将空间编码为加号,然后再编码为%20。如何保持一致性?
我有一些Java代码,它接受字符串并将Java URLEncoder将空间编码为加号,然后再编码为%20。如何保持一致性?,java,urlencode,Java,Urlencode,我有一些Java代码,它接受字符串并将空格转换为+。但当我的程序读回该字符串时,它会将+转换为%20 我是否有办法保持一致,以便: 将空格直接转换为%20,或 不将+转换为%20` 我的代码是这样的: import java.net.URLEncoder; ... String fileNameEncoded = URLEncoder.encode(filename); 因此,如果filename是foo bar.html,第一次通过会给我foo+bar.html,第二次通过会给我foo%20
空格
转换为+
。但当我的程序读回该字符串时,它会将+
转换为%20
我是否有办法保持一致,以便:
空格直接转换为%20
,或
转换为
%20`import java.net.URLEncoder;
...
String fileNameEncoded = URLEncoder.encode(filename);
因此,如果filename
是foo bar.html
,第一次通过会给我foo+bar.html
,第二次通过会给我foo%20bar.html
来理解“直接到%20的空间”我们首先应该理解为什么要编码URL,答案是因为URL中有一些字符不允许用于URL格式,如“&”、“=”、“”等,因为它们会导致URL解析失败。
因此,URLEncoder将这些字符替换为URL格式中允许的一些常规其他字符。URL解析器将这些常规字符替换回“&”、“=”、“”等。第二步是什么?什么节目?什么java代码?试着从一个愿意帮助你但不了解你的环境、你的目的、你跟踪输出等的人的角度来看待你自己的问题。“垃圾输入、垃圾输出”完全适用于询问有关技术问题的问题。如果可能的话,在本例中可能是这样,编写一个小程序来说明您正在谈论的内容,因为运行的小程序通常至少是明确的。为什么要对字符串进行两次url编码。一张通行证就足够了。如果你想做两次,那么也要解码两次。对不起,我不明白你还需要什么其他信息。如果您只需运行我上面提供的代码,并将
foo bar.html
的示例输入作为文件名
,您就会明白我在说什么。@JBNizet我认为这是关键。我对它进行了两次编码,而不是一次编码第二次解码。我已经运行了上面的程序fileNameEncoded
是承诺的“foo+bar.html”
。如果我外推并运行urldecode.decode
,我会返回“foo bar.html”
。看来问题在于你拒绝给我们看的代码。谢谢。看起来我不太理解urlcoder.encode
方法背后的概念。