9

SOF がこれを尋ねるのに最適な場所かどうかはわかりませんが、Java URLEncoderURLDecoderについて何か。

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

しかし、Java にはCharsetクラスが組み込まれており、 Java の StandardCharsetsまたはGuava の CharsetsCharsetを使用して、好みのエンコーディングのオブジェクトに簡単にアクセスできます。これにより、正しいスペルのエンコーディング名を入力した場合に決してスローされないことがわかっている例外をキャッチする必要がなくなります。のようなメソッドを使用する機能がないと、コード名を格納するために追加の String 変数を格納する必要があり、次のように非常に冗長な try-catch ステートメントがあるため、私が記述するコードは非常に見苦しくなります。encode()URLEncoder.encode(String, Charset)

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...");
}

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

したがって、私はただ疑問に思っています.なぜJavaには no がURLEncoder.encode(String, Charset)ないのURLDecoder.decode(String, Charset)ですか? Java 言語の開発者は、これをサポートする予定はありますか? それは、私が上で書いた複数行の怪物を、政府がUTF-8を犯罪にしない限り決して起こらないことがわかっている例外をキャッチする必要のない、より快適なワンライナーに変えるでしょう. URLEncoder と URLDecoder に欠けているこの機能を改善する既存の実装またはライブラリはありますか? Guava で何かを検索しようとしましたが、何も見つかりませんでした。

4

1 に答える 1