2013-07-30 14 views
8

Non sono sicuro che SOF sia il posto migliore per chiederlo, ma qualcosa su java URLEncoder e URLDecoder.Perché no URLEncoder.encode (String, Charset), URLDecoder.decode (String, Charset)

Per URLEncoder, ha il metodo encode(String, String) in cui il secondo parametro è il nome della codifica da utilizzare. Se la codifica non è valida, viene lanciato un UnsupportedEncodingException. È un'eccezione controllata, quindi è necessario utilizzare una dichiarazione try-catch quando si chiama encode(). Questo ha un senso in termini di utilizzo di una codifica String ...

Ma Java ha la classe Charset costruito e si può facilmente accedere all'oggetto del vostro codifica preferito Charset utilizzando Java's StandardCharsets o Guava's Charsets. Ciò impedirebbe di dover rilevare un'eccezione che non si sarà mai generata se si alimentasse encode() un nome di codifica correttamente digitato. Senza la possibilità di utilizzare un metodo come URLEncoder.encode(String, Charset), il codice che scrivo diventa davvero brutto, perché ho bisogno di memorizzare una variabile String in più per memorizzare il nome di codifica e ho un try-catch abbastanza ridondante, in questo modo:

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

La stessa logica applicata a URLDecoder.decode(String, String).

Quindi, mi chiedo, perché Java non ha URLEncoder.encode(String, Charset) o URLDecoder.decode(String, Charset)? Gli sviluppatori del linguaggio Java hanno piani per supportarlo? Avrebbe trasformato la mostruosità multi-linea che ho scritto sopra in un one-liner più piacevole che non richiede l'osservazione di un'eccezione che so non accadrà mai a meno che il governo non abbia reso UTF-8 un crimine. Esistono implementazioni o librerie esistenti che migliorano questa caratteristica mancante da URLEncoder e URLDecoder? Ho provato a cercare qualcosa in Guava, ma non ho trovato nulla.

+3

La mia ipotesi è solo temporizzazione - URLDecoder è uscito con JDK 1.0 e Charset è arrivato più tardi con JDK 1.4. ['YourCharset.name()'] (http://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html#name%28%29) restituisce il nome canonico, che dovresti essere in grado di passare a 'decode()' senza timore di un'eccezione. – jedwards

+0

@jedwards dovresti fare una risposta. – ecbrodie

+0

Non è necessario memorizzare una variabile stringa extra '. E 'stata una tua scelta. Il compilatore avrebbe riunito tutti gli "UTF-8" insieme comunque. Le domande sullo sviluppo futuro di Java dovrebbero essere indirizzate ai futuri sviluppatori Java, non SO. – EJP

risposta

5

Non posso dirlo con certezza, ma la mia ipotesi è solo temporizzazione - URLDecoder è uscito con JDK 1.0 e Charset è arrivato più tardi con JDK 1.4.

YourCharset.name() restituisce una stringa contenente il nome canonico, che dovresti essere in grado di passare alla decodifica() senza timore di un'eccezione.

Problemi correlati