web-dev-qa-db-ja.com

AndroidでURLエンコードする方法は?

私はXML解析を使用して画像を表示するためにグリッドビューを使用しています、私はいくつかのような例外を得ました

Java.lang.IllegalArgumentException:インデックス80のパスに不正な文字: http://www.theblacksheeponline.com/party_img/thumbspps/912big_361999096_Flicking Off Douchebag.jpg

この問題を解決するには?あらゆる種類のURLを表示したいのですが、だれでも知っているサンプルコードを教えてください。

皆さんありがとう

17
sivaraj

Android Java SE;

try {
    String url = "http://www.example.com/?id=123&art=abc";
    String encodedurl = URLEncoder.encode(url,"UTF-8");
    Log.d("TEST", encodedurl);
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
} 
28
Cpt.Ohlund

これも使えます

private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%";
String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS);

最も簡単な方法です

15
Jedo

Benがコメントで述べているように、次の例に従ってURLのセマンティクスを W3C から変更するため、URLEncoder.encodeを完全なURLに使用しないでください。

URI http://www.w3.org/albert/bertram/marie-claude および http://www.w3.org/albert/bertram%2Fmarie-claude =は同一ではありません。2番目のケースでは、エンコードされたスラッシュは階層的に重要ではありません。

代わりに、 RFC 3986 セクション2.4から独立して、URLのコンポーネント部分を個別にエンコードする必要があります。

通常の状況では、URI内のオクテットがパーセントエンコードされるのは、そのコンポーネントパーツからURIを生成するプロセス中だけです。これは、サブコンポーネントの区切り文字として使用する予約文字とデータとして安全に使用できる予約文字を実装が決定する場合です。いったん生成されると、URIは常にパーセントでエンコードされた形式になります。

つまり、簡単に言うと、あなたの場合、ファイル名をエンコード/エスケープしてから、URLをアセンブルする必要があります。

6
BitMask777

RL全体はエンコードせず、その一部のみを「信頼できないソース」のようなものからエンコードします。

String query = URLEncoder.encode("Hare Krishna ", "utf-8");
String url = "http://stackoverflow.com/search?q=" + query;
4
Dhruv Raval

以下の方法を使用できます

public String parseURL(String url, Map<String, String> params)
{
    Builder builder = Uri.parse(url).buildUpon();
    for (String key : params.keySet())
    {
        builder.appendQueryParameter(key, params.get(key));
    }
    return builder.build().toString();
}
1
Elango

URLEncoderはクエリのエンコードにのみ使用してください。代わりに Java.net.URI クラスを使用してください:

 URI uri = new URI(
 "http"、
 "www.theblacksheeponline.com"、
 "/ party_img/thumbspps/912big_361999096_Flicking Off Douchebag.jpg" 、
 null); 
文字列リクエスト= uri.toASCIIString(); 
1
Oleg Smirnov

( "")の代わりに(+)サインインを追加したURLEncoderを試してみましたが、機能せず、404 url​​ not foundエラーが発生しました。

その後、私はより良い答えを得るためにグーグルで検索し、これとその動作が素晴らしいことを発見しました。

String urlStr = "http://www.example.com/test/file name.mp4";
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();

この方法でURLをエンコードすると、URLを使用してURLを異なる部分に分離できるため、非常に便利です。したがって、文字列操作を実行する必要はありません。

次に、2番目のURIクラスであるこのアプローチは、単一の文字列からではなくコンポーネントを介してURIを構築するときに、コンポーネントを適切にエスケープするURIクラス機能を利用します。

1
Krunal Shah