2013-07-30 30 views
8

SOF bunun için en iyi yer olup olmadığından emin değilim, ama java URLEncoder ve URLDecoder hakkında bir şey.Neden yok URLEncoder.encode (String, Charset), URLDecoder.decode (String, Charset)

URLEncoder için, ikinci parametrenin kullanılacak kodlamanın adı olduğu encode(String, String) yöntemine sahiptir. Kodlama geçerli değilse, UnsupportedEncodingException atılır. Bu kontrol edilmiş bir istisnadır, dolayısıyla encode() numaralı telefonu çağırırken bir try-catch ifadesi kullanılmalıdır. Bu ... String kodlama kullanarak açısından mantıklı

Ama Java inşa Charset sınıfı vardır ve kolayca Java's StandardCharsets veya Guava's Charsets kullanarak favori kodlama Charset nesneye erişebilir. Bu, encode()'u doğru yazılmış bir kodlama adıyla beslediyseniz asla atılmayacağınızı bildiğiniz bir istisna yakalamaya gerek duymaz. Ben kodlama adını depolamak için ekstra bir dize değişkeni saklamak gerekir çünkü URLEncoder.encode(String, Charset) gibi bir yöntem kullanma yeteneği olmadan, ben yazmak kod gerçekten çirkin olur ve bu yüzden gibi, oldukça gereksiz try-catch deyimi vardır:

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

Aynı mantık URLDecoder.decode(String, String)'a uygulanır.

Bu yüzden, merak ediyorum, neden Java URLEncoder.encode(String, Charset) veya URLDecoder.decode(String, Charset)'a sahip değil? Java dilinin geliştiricilerinin bunu destekleme konusunda herhangi bir planı var mı? Yukarıda yazdığım çok çizgili canavarlığı, hükümetin UTF-8 suçu olmadıkça asla oluşmayacağını bildiğim bir istisna yakalamamı gerektirmeyen, daha hoş bir tek liner haline getirecekti. URLEncoder ve URLDecoder'dan bu eksik özelliği iyileştiren var olan uygulamalar veya kütüphaneler var mı? Guava'da bir şey aramayı denedim, ama hiçbir şey bulamadım.

+3

Tahminim sadece zamanlamadır - URLDecoder JDK 1.0 ile çıktı ve Charset daha sonra JDK 1.4 ile geldi. ['YourCharset.name()'] (http://docs.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html#name%28%29) standart adı döndürür. Bir istisnadan korkmadan 'decode()' ya geçebilmelisiniz. – jedwards

+0

Şimdilik bir cevap vermelisiniz. – ecbrodie

+0

'Fazladan bir String değişkenini saklamanız gerekmiyor'. Bu senin seçimin. Derleyici, zaten tüm "UTF-8" ler bir arada toplanmış olurdu. Gelecek Java geliştirmeyle ilgili sorular, gelecekteki Java geliştiricilerine değil, SO'ya yönlendirilmelidir. – EJP

cevap

5

Elbette emin değilim, ama benim tahminim sadece zamanlama - URLDecoder JDK 1.0 ile çıktı ve Charset daha sonra JDK 1.4 ile geldi.

YourCharset.name(), istisnadan korkmadan kod çözme() yapabilmeniz için kurallı ad içeren bir Dize döndürür.

İlgili konular