2009-05-22 5 views
16

Je veux utiliser la classe URLEncoder/URLDecoder (java.net.URLEncoder/URLDecoder) dans une application et les méthodes: encoder (String s, String enc)/decode (String s, String enc), mais je ne sais pas quelle peut être la valeur de l'argument String enc? Je veux encoder/décoder dans le type de contenu MIME "x-www-form-urlencoded". Nous vous remercions de votre aide.URLEncoder encoder/URLDecoder décoder en Java (Android)

Répondre

17

Le paramètre de codage est le codage de caractères que vous utilisez. .

+0

Je dois écrire comme ça: encode ("bonjour", "x urlencoded-www-form-") ou pour son "x-www-form-urlencoded" encode ("bonjour", "UTF-8 ")? –

+0

Vous devez écrire encoder ("bonjour", "UTF-8"). x-www-form-urlencoded est toujours le type du résultat. Le paramètre de codage se réfère à vos données d'entrée. – jgre

+0

Merci pour votre réponse! –

1

Le JavaDoc a tous les détails

+0

Le JavaDoc ne mentionne pas tous les formats d'encodage possibles et je ne me vois lien vers un ENUM qui pourrait les lister. – anon58192932

4

D'abord, vous devez définir le type de contenu comme un «x-www-form-urlencoded. Ensuite, quel que soit le contenu que vous souhaitez encoder, encodez-le en utilisant "UTF-8".

Par exemple:

Pour définir le contenu de 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"); 


Ou si vous utilisez un JSP, vous pouvez écrire ce qui suit sur en haut.

<%@ 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"> 

Et à utiliser URLEncoder:

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

J'ai fait: - HttpPost post = new HttpPost ("url"); - post.setHeader ("Content-Type", "application/x-www-form-urlencoded"); - Chaîne encodedString = URLEncoder.encoder ("bonjour", "UTF-8"); - StringEntity temp; - temp.setContentEncoding (encodedString); - post.setEntity (temp); , puis exécutez DefaultHttpClient avec un post pour l'argument. –

+0

Merci pour votre réponse! –

+0

Espérons que cela fonctionne maintenant! – Sourabh

0

URLEncoder et URLDecoder les deux sont exception Throwable et doit donc être au moins entouré par bloc try/catch. Cependant il existe un moyen de bits Litle simplier utilisant android.net.Uri:

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

Ce sont des méthodes statiques, utilise utf-8, disponible depuis API-1 et ne jette aucune exception.

0

Mon préféré:

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; 
} 

retourne une chaîne vide si l'URL ne dispose pas d'une partie du nom de fichier, comme https://stackoverflow.com/ ou https://stackoverflow.com/questions/. S'il y a une barre oblique inverse dans la partie du nom de fichier, elle est conservée.

Vous pouvez dépouiller les deux dernières lignes si vous avez besoin le nom court avec extension à la place.

Questions connexes