2009-05-22 8 views
16

Ich möchte die URLEncoder/URLDecoder Klasse (java.net.URLEncoder/URLDecoder) in einer Anwendung verwenden und die Methoden: encode (String s, String enc)/decode (String s, String enc), aber ich weiß nicht, was der Wert des String-Arguments enc sein kann? Ich möchte im MIME-Inhaltstyp "x-www-form-urlencoded" codieren/dekodieren. Vielen Dank für Ihre Hilfe.URLEncoder encode/URLDecoder Dekodieren in Java (Android)

Antwort

17

Der Codierungsparameter ist die von Ihnen verwendete Zeichencodierung. For example "UTF-8".

+0

Also muss ich es so schreiben: encode ("Hallo", "x-www-form-urlencoded") oder für "x-www-form-urlencoded" ist es kodieren ("Hallo", "UTF-8 ")? –

+0

Sie müssen schreiben kodieren ("Hallo", "UTF-8"). x-www-form-urlencoded ist immer die Art des Ergebnisses. Der Encoding-Parameter bezieht sich auf Ihre Eingabedaten. – jgre

+0

Vielen Dank für Ihre Antwort! –

1

The JavaDoc hat alle Details

+0

Die JavaDoc erwähnt nicht alle möglichen Kodierungsformate noch sehe ich ein Link zu einem ENUM, das sie auflisten könnte. – anon58192932

4

Zuerst Sie den Content-Type als 'x-www-form-urlencoded' einstellen müssen. Dann kodieren Sie den Inhalt, den Sie kodieren möchten, mit "UTF-8".

Zum Beispiel:

Zum Inhalt auf 'x-www-form-urlencoded':

URL url = new URL("http://www.xyz.com/SomeContext/SomeAction"); <br> 
URLConnection urlConnection = url.openConnection();<br> 
....<br> 
....<br> 
urlConnection.setRequestProperty("Content-type","application/x-www-form-urlencoded"); 


Oder wenn Sie eine JSP verwenden, dann können Sie schreiben folgendes auf Spitze davon.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><br> 
< META http-equiv="Content-Type" content="text/html; charset=UTF-8"> 


< FORM action="someaction.jsp" enctype="application/x-www-form-urlencoded" name="InputForm" method="POST"> 

Und URLEncoder zu verwenden:

String encodedString = URLEncoder.encode("hello","UTF-8"); 
+0

Ich habe getan: - HttpPost post = new HttpPost ("url"); - post.setHeader ("Inhaltstyp", "application/x-www-form-urlencoded"); - Zeichenfolge encodedString = URLEncoder.kodieren ("Hallo", "UTF-8"); - StringEntity temp; - temp.setContentEncoding (encodedString); - post.setEntity (temp); und dann einen DefaultHttpClient mit post für argument ausführen. –

+0

Vielen Dank für Ihre Antwort! –

+0

Ich hoffe, es funktioniert jetzt! – Sourabh

0

URLEncoder und URLDecoder beide Ausnahme Throwable und müssen daher zumindest durch try/catch-Block eingeschlossen werden. Allerdings gibt es eine Art und Weise litle Bit simplier Verwendung android.net.Uri:

Uri.decode(string); 
Uri.encode(string); 

Diejenigen statischen Methoden sind, verwendet UTF-8, erhältlich, da API-1 und wirft keine Ausnahme.

0

Mein persönlicher Favorit:

static String baseNameFromURL(URL url) { 
    String shortName; 
    String path = url.getPath(); 
    String escaped = path.substring(path.lastIndexOf('/') + 1); 
    try { 
     shortName = URLDecoder.decode(escaped, "UTF-8"); 
    } catch (UnsupportedEncodingException e) { 
     throw new Error(e.getMessage(), e); 
    } 
    int period = shortName.lastIndexOf('.'); 
    return period > -1 ? shortName.substring(0, period) : shortName; 
} 

Gibt einen leeren String, wenn die URL nicht einen Dateinamen Teil hat, wie https://stackoverflow.com/ oder https://stackoverflow.com/questions/. Wenn im Dateinamen ein Backslash vorhanden ist, wird dieser beibehalten.

Sie können die letzten zwei Zeilen entfernen, wenn Sie stattdessen den Kurznamen mit der Erweiterung benötigen.