java.net.URLEncoder.encode(String)は非推奨です。代わりに何を使用すればよいですか?


192

を使用すると次の警告が表示されますjava.net.URLEncoder.encode

警告:[非推奨] encode(java.lang.String)
         java.net.URLEncoderで非推奨になりました

代わりに何を使用する必要がありますか?


23
これは、ドキュメントの非推奨タグで答えられています:「代わりに、encode(String、String)メソッドを使用してエンコーディングを指定してください。」java.sun.com/javase/6/docs/api/java/net/URLEncoder.htmlを参照してください。
マイケルマイヤーズ

回答:


277

URLEncoderの他のencodeメソッドを使用します。

URLEncoder.encode(String, String)

最初のパラメーターはエンコードするテキストです。2番目は、使用する文字エンコーディングの名前です(例:)UTF-8。例えば:

System.out.println(
  URLEncoder.encode(
    "urlParameterString",
    java.nio.charset.StandardCharsets.UTF_8.toString()
  )
);

14
@jsh:私は混乱しています、なぜURLDecoderがあるべきではないのですか?これによりJavaが肥大化するのはなぜですか?これらは静的メソッドです。どちらの入力にも同じ量の労力が必要です。Pythonが好きなら、なぜJavaでプログラミングしているのですか?Pythonよりも多くの人がJavaを使用していて、Pythonの代わりにJavaの仕事を得たからでしょうか。
ステパニア語2012

10
彼はそれがグローバルクラスの名前空間を過密にしているのでそれを肥大化したと呼んでいます。URL.encodeとURL.decode、または単にURLEncoder.decodeさえあるのに、URLEncoder.encodeとURLDecoder.decodeがあるのはなぜですか?なぜそれをすべて冗長で肥大にするのですか?そのJavaので。
BT

30
そして、UTF-8はほとんどどこでもサポートされているはずですが、UnsupportedEncodingExceptionを処理する必要があります。
デイブキャメロン

8
:@tc:Javaの7は、これらの定数を導入しStandardCharsets.US_ASCIIStandardCharsets.UTF_8残念ながら、などURLEncoder.encodeは受け付けていませんCharset...(他の多くのmoethodsが行います)。
sleske 2013年

12
マイナーな提案-使用URLEncoder.encode(<urlStringToBeEncoded>, StandardCharsets.UTF_8.name())。静的定数UTF_8toString()メソッドを文字エンコードスキームとして使用するjava.nio.charset.IllegalCharsetNameException: java.nio.charset.CharsetICU[UTF-8]と、toString()「java.nio.charset.CharsetICU [UTF-8]」が返されます。目的の「UTF-8」を取得するには、name()代わりにそのメソッドを使用します。
et_l 2017年


24

クラスURLEncoderを使用します。

URLEncoder.encode(String s, String enc)

どこ :

s-翻訳する文字列。

enc-サポートされている文字エンコーディングの名前。

標準文字セット:

US-ASCII 7ビットASCII、別名ISO646-US、別名Unicode文字セットの基本ラテンブロックISO-8859-1 ISOラテンアルファベットNo. 1、別名ISO-LATIN-1

UTF-8 8ビットUCS変換フォーマット

UTF-16BE 16ビットUCS変換フォーマット、ビッグエンディアンバイトオーダー

UTF-16LE 16ビットUCS変換フォーマット、リトルエンディアンバイトオーダー

UTF-16 16ビットUCS変換フォーマット、オプションのバイト順マークで識別されるバイト順

例:

import java.net.URLEncoder;

String stringEncoded = URLEncoder.encode(
    "This text must be encoded! aeiou áéíóú ñ, peace!", "UTF-8");

1

最初のパラメータはエンコードする文字列です。2番目は、使用する文字エンコーディングの名前です(UTF-8など)。


0

他の応答の追加リファレンスとして、「UTF-8」を使用する代わりに、以下を使用できます。

HTTP.UTF_8

これは、Java 4以降、org.apache.http.protocolライブラリの一部として含まれています。これは、Android API 1以降にも含まれています。


間違っています。このクラスはApache HttpClient 4.xライブラリorg.apache.http.protocol.HTTPクラスにあります。
ブハケシンディ2014

@BuhakeSindi true、私はAPI 1を読みましたが、それはJavaではなくAndroidのものでした。Java7より前に存在していたとしても、それはすでに非難されています。
htafoya 14

いいえ、このクラスはJava JDKのどのバージョンに存在していません。Androidは、Apache HttpClientライブラリに従います(ソースコードもそこから取得したとしても驚くことはありません)。
ブハケシンディ2014

3
警告:[非推奨] HTTPのUTF_8は非推奨になりました
sgtdck 2014年

0

の使用org.apache.commons.httpclient.URIは厳密には問題ではありません。問題は、間違ったコンストラクタをターゲットにすることです。減価償却を。

ただ使う

new URI( [string] );

確かに減価償却済みとしてフラグを立てます。必要なのは、少なくとも1つの追加の引数(最初の、以下)と、理想的には2つの引数を提供することです。

  1. escaped:URI文字シーケンスがエスケープ形式の場合はtrue。それ以外の場合はfalse。
  2. charset:必要に応じて、エンコーディングをエスケープする文字セット文字列

これは、そのクラス内の非減価償却コンストラクターをターゲットにします。したがって、理想的な使用法は次のようになります。

new URI( [string], true, StandardCharsets.UTF_8.toString() );

- (11年以上の後に髪Aがゲームクレイジー-少し遅れエガド!、私はこれは遠端の方法がされている場合は特に、他の誰かを役に立てば幸い)、まだのような、URIを期待しますorg.apache.commons.httpclient.setURI()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.