10

rfc2396 に準拠するように URL 文字列をエンコードし、たとえば %20 がスペース文字に置き換えられるように rfc2396 準拠の文字列をデコードする最良の方法は何ですか?

編集: URLEncoder および URLDecoder クラスは、rfc2396 準拠の URL をエンコード/デコードしませ。それらは、HTML フォーム パラメーター データのエンコードに使用される application/x-www-form-urlencoded の MIME タイプにエンコードします。

4

4 に答える 4

12

次のように URI クラスを使用します。

URI uri = new URI("http", "//www.someurl.com/has spaces in url", null);
URL url = uri.toURL();

または、文字列が必要な場合:

String urlString = uri.toASCIIString();
于 2009-02-23T20:21:26.913 に答える
2

エスケープする必要がある文字を含む可能性のあるコンポーネント パーツは、URI に連結される前に、URLEncoder を使用して既にエスケープされている必要があります。

帯域外の文字 (スペース、"<>[]{}\|^`、および非 ASCII バイトなど) を含む URI がある場合、それは実際には URI ではありません。次の方法で修正を試みることができます。手動で % エスケープしますが、これは最終的な修正操作であり、標準形式のエンコーディングではありません. これは通常、ユーザー入力から潜在的に不正な URI を受け入れる場合に必要ですが、標準化された操作ではなく、私は使用しませんあなたのためにそれを行う組み込みのJavaライブラリ関数を知りません.RegExpで何かを自分でハックする必要があるかもしれません.

逆に、(URLDecoder を使用して) 各部分をアンエスケープする前に、URI をコンポーネント部分 (それぞれ個別のパス部分、クエリパラメーターの名前と値など) に分解する必要があります。一度に URI 全体を % デコードする賢明な方法はありません。「区切り文字にデコードされない % エスケープをデコードする」(/?=&;% など) こともできますが、URI 処理標準に準拠していない奇妙な矛盾した文字列が残ることになります。

URLEncoder/URLDecoder は、名前と値の両方の URI クエリ コンポーネントを処理するのに適しています。ただし、それらはURI パス パーツ コンポーネントの処理には適していません。違いは、「+」文字がパス部分のスペースを意味しないことです。これは、単純な文字列置換で修正できます。URLEncoding の後で、'+' を '%20' に置き換えます。URLDecoding の前に、「+」を「%2B」に置き換えます。パスにスペースまたはプラスを含むセグメントを含める予定がない場合は、違いを無視できます。

于 2008-11-20T14:02:14.083 に答える
1

javadocs では、java.net.URI クラスを使用してエンコードを行うことを推奨しています。URI クラスが URL を適切にエンコードするようにするには、複数引数のコンストラクターの 1 つを使用する必要があります。これらのコンストラクターは必要なエンコードを実行しますが、URL 文字列をパラメーターに解析する必要があります。

デコードしたい場合は、エンコーディングを行わない単一引数のコンストラクターで URI を構築する必要があります。その後、getPath() などのメソッドを呼び出して、デコードされた URL を取得および構築できます。

于 2008-11-20T12:22:26.937 に答える
-3

java.net.URLEncoderおよびjava.net.URLDecoderを使用します。

于 2008-11-20T11:18:17.347 に答える