W3Cによると(これらは公式のソースです)、クエリ文字列 (およびクエリ文字列のみ) 内の空白文字は、" %20
" または " "としてエンコードされる可能性があります+
。「推奨事項」の下の「クエリ文字列」セクションから:
クエリ文字列内では、プラス記号はスペースの簡略表記として予約されています。したがって、実際のプラス記号をエンコードする必要があります。このメソッドは、スペースを許可しないシステムでクエリ URI を渡しやすくするために使用されました。
一般的な URI の公式仕様であるRFC2396のセクション 3.4 によると、「クエリ」コンポーネントは URL に依存します。
3.4。クエリ コンポーネント クエリ コンポーネントは、リソースによって解釈される情報の文字列です。
query = *uric
クエリ コンポーネント内では、文字「;」、「/」、「?」、「:」、「@」、「&」、「=」、「+」、「,」、および「$」は予約されています。
したがって、" " 文字としてエンコードされたクエリ文字列にスペースを含む URL を受け入れない場合、他のソフトウェアのバグです+
。
あなたの質問の3番目の部分については、出力を修正する1つの方法(少し醜いですが)は、戻り値URLEncoder.encode()
を呼び出すことです。 replaceAll("\\+","%20")