Warum kein URLEncoder.encode (String, Charset), URLDecoder.decode (String, Charset) [geschlossen]

8

Ich bin mir nicht sicher, ob SOF der beste Ort ist, um das zu fragen, aber etwas über das Java URLEncoder und URLDecoder .

Für URLEncoder gibt es die Methode encode(String, String) , wobei der zweite Parameter der Name der zu verwendenden Codierung ist. Wenn die Codierung nicht gültig ist, wird ein UnsupportedEncodingException ausgelöst. Es ist eine geprüfte Ausnahme, daher muss eine try-catch-Anweisung verwendet werden, wenn encode() aufgerufen wird. Dies macht Sinn in Bezug auf die Verwendung einer String-Codierung ...

Aber Java hat die Charset Klasse eingebaut und Sie können einfach auf das Objekt Charset Ihrer bevorzugten Kodierung zugreifen, indem Sie Java's StandardCharsets verwenden oder Guavas Charsets . Dies würde verhindern, dass Sie eine Ausnahme abfangen müssen, von der Sie wissen, dass sie nie ausgegeben wird, wenn Sie encode() mit einem korrekt geschriebenen Codierungsnamen versehen haben. Ohne die Möglichkeit, eine Methode wie URLEncoder.encode(String, Charset) zu verwenden, wird der Code, den ich schreibe, wirklich hässlich, weil ich eine zusätzliche String-Variable speichern muss, um den Kodierungsnamen zu speichern, und ich habe eine ziemlich redundante try-catch-Anweisung, wie folgt:

%Vor%

Dieselbe Logik, die auf URLDecoder.decode(String, String) angewendet wurde.

Ich frage mich also, warum Java nicht URLEncoder.encode(String, Charset) oder URLDecoder.decode(String, Charset) hat? Haben die Entwickler der Java-Sprache Pläne, dies zu unterstützen? Es würde die mehrzeilige Ungeheuerlichkeit, die ich oben geschrieben habe, in einen angenehmeren Einzeiler verwandeln, der keine Ausnahme zu erfassen braucht, von der ich weiß, dass sie nie eintreten wird, wenn die Regierung UTF-8 nicht zu einem Verbrechen macht. Gibt es vorhandene Implementierungen oder Bibliotheken, die dieses fehlende Feature von URLEncoder und URLDecoder verbessern? Ich habe versucht, nach etwas in Guava zu suchen, aber nichts gefunden.

    
ecbrodie 30.07.2013, 17:03
quelle

1 Antwort

5

Ich kann es nicht mit Sicherheit sagen, aber meine Vermutung ist nur Timing - URLDecoder kam mit JDK 1.0 heraus und Charset kam später mit JDK 1.4.

YourCharset.name() gibt einen String mit dem kanonischen Namen zurück, den Sie ohne Angst vor einer Ausnahme an decode () übergeben können.

    
jedwards 30.07.2013 21:08
quelle