2013-07-30 14 views
8

SOFがこれを尋ねるのに最適な場所かどうかはわかりませんが、JavaのURLEncoderURLDecoderについてはわかりません。URLEncoder.encode(String、Charset)、URLDecoder.decode(String、Charset)がない理由

URLEncoderの場合、メソッドencode(String, String)があります。ここで2番目のパラメータは、使用するエンコーディングの名前です。エンコーディングが有効でない場合、UnsupportedEncodingExceptionがスローされます。これはチェックされた例外です。したがって、encode()を呼び出すときにtry-catchステートメントを使用する必要があります。これは...文字列のエンコーディングを使用しての面で理にかなって

しかし、Javaは内蔵のCharsetクラスを持って、あなたは簡単にJava's StandardCharsetsまたはGuava's Charsetsを使用して、お気に入りのエンコーディングのCharsetオブジェクトにアクセスすることができます。これにより、encode()に正しいスペルのエンコード名を指定した場合、スローされない例外をキャッチする必要がなくなります。

private static final String utf8 = "UTF-8"; 
... 
String msg = ...; 
try { 
    String encodedMsg = URLEncoder.encode(msg, utf8); 
    ... 
} catch (UnsupportedEncodingException e) { 
    // This exception should never happen 
    System.err.println("Uh oh..."); 
} 
:私はエンコーディング名を保存するために余分な文字列変数を格納する必要があると私はそうのように、かなり冗長のtry-catchステートメントを持っているので、 URLEncoder.encode(String, Charset)のような方法を使用する能力がなければ、私が書いたコードが本当に醜くなりました

URLDecoder.decode(String, String)にも同じロジックが適用されます。

したがって、私はJavaになぜURLEncoder.encode(String, Charset)URLDecoder.decode(String, Charset)も持っていないのだろうかと疑問に思いますか? Java言語の開発者はこれをサポートする計画はありますか?それは、私がUTF-8を犯罪にしない限り、私が知る限り例外ではない例外をキャッチする必要がない、もっと楽しい1ライナーに、私が上に書いた複数行の怪獣を変えるだろう。 URLEncoderとURLDecoderの欠落した機能を改善する既存の実装やライブラリはありますか?グアバで何かを探してみましたが、何も見つかりませんでした。

+3

私の推測はちょうどタイミングです.URLDecoderはJDK 1.0で、CharsetはJDK 1.4で後に来ました。 ['YourCharset.name()'](http://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html#name%28%29)は、正規名を返します。例外の恐れなしに 'decode()'に渡すことができるはずです。 – jedwards

+0

@ jedwardsあなたはそれを答えるべきです。 – ecbrodie

+0

余分な文字列変数を格納する必要はありません。それがあなたの選択でした。コンパイラは、とにかくすべての "UTF-8"をプールしていました。将来のJava開発についての質問は、今後のJava開発者に向けられるべきであり、そうではありません。 – EJP

答えて

5

確かに言うことはできませんが、私の推測はちょうどタイミングです.URLDecoderはJDK 1.0で、CharsetはJDK 1.4で後に来ました。

YourCharset.name()は、例外の恐れなしにdecode()に渡すことができる標準名を含むStringを返します。

関連する問題