私の場合はunwise characters (RFC 2396)のパスを含むURLオブジェクトを持っています。 (パイプ)文字。 これをURIに安全に変換する必要がありますが、URL.toURI()
は例外をスローします。私はURL documentationを読んだが、この部分は私のために混乱して賢明でない文字がある場合、URL toURIをどのように変換するのですか?
:
URLクラス自体がRFC2396で定義されたエスケープ機構に従って、任意のURLコンポーネント をエンコードまたはデコードしません。 URLを呼び出す前に をエスケープする必要があり、エスケープされたフィールドであるURLから返された をデコードする必要があるフィールドをエンコードするのは、呼び出し元の 責任です。さらに、URLには知識のある がエスケープされていないため、エンコードされた と同じURLのデコードされた形式との間の同等性は認識されません。
どうすればいいですか?変換中にこの文字をエンコードするパターンは何ですか? URLオブジェクトのエンコードされたコピーを作成する必要がありますか?それが動作するように
URI uri = new URI(url.getProtocol(),
null /*userInfo*/,
url.getHost(),
url.getPort(),
(url.getPath()==null)?null:URLDecoder.decode(url.getPath(), "UTF-8"),
(url.getQuery()==null)?null:URLDecoder.decode(url.getQuery(), "UTF-8"),
null /*fragment*/);
が見える、here is an example:
この方法では、それはURLがURLの一部をエンコードしてURLを変更し、私の解決策を参照してください –
はいあなたは正しいです私はいくつかの時間自我は、ideone.com(最初のリンクを参照してください)私は私の解決策を修正したことに気づいたと私はこの問題を明らかにする追加のテストケースを追加しました。私はあなたのソリューションをチェックします、それは良く見えます。 –
jmeterに投稿したバグは昨日修正されていますので、夜間に –