2
java.net.URI.create("http://adserver.adtech.de/adlink|3.0")

スロー

java.net.URISyntaxException: 
Illegal character in path at index 32: http://adserver.adtech.de/adlink|3.0

でも

new java.net.URL("http://adserver.adtech.de/adlink|3.0")

うまく動作します。

更新 1

でも

new org.apache.commons.httpclient.URI("http://adserver.adtech.de/adlink|3.0")

も完全に機能します。

どういう理由ですか?

4

1 に答える 1

6

単一の String 引数を取る URI のコンストラクターでは、RFC 2396 が URI に対して定義する厳密な構文規則に従う必要があります。これらの規則によれば、|としてエンコードする必要があります%7C。他のコンストラクターは URI コンポーネントをエンコードできるため、たとえば、これは例外をスローしません。

new java.net.URI("http", "//adserver.adtech.de/adlink|3.0", null);

もう一方の URL クラスは、URI 構文規則を適用しません。実際、エンコードする必要があるコンポーネントをエンコードするのはユーザーの責任です。URL クラスは役に立ちません。ドキュメントから:

URL を呼び出す前にエスケープする必要があるフィールドをエンコードすること、および URL から返されるエスケープされたフィールドをデコードすることは、呼び出し元の責任です。

于 2013-03-19T00:56:26.250 に答える