Java URLEncoder将空间编码为加号,然后再编码为%20。如何保持一致性?

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

我有一些Java代码,它接受字符串并将
空格
转换为
+
。但当我的程序读回该字符串时,它会将
+
转换为
%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
    方法背后的概念。