2009-05-22 31 views
16

Quiero usar la clase URLEncoder/URLDecoder (java.net.URLEncoder/URLDecoder) en una aplicación y los métodos: encode (String s, String enc)/decode (String s, String enc), pero no sé cuál puede ser el valor del argumento de cadena enc? Quiero codificar/decodificar en el tipo de contenido MIME "x-www-form-urlencoded". Gracias por su ayuda.URLEncoder encode/URLDecoder decode en java (Android)

Respuesta

17

El parámetro de codificación es la codificación de caracteres que está utilizando. For example "UTF-8".

+0

Así que tengo que escribirlo así: codificar ("hola", "x-www-form-urlencoded") o para "x-www-form-urlencoded" es codificar ("hola", "UTF-8 ")? –

+0

Tiene que escribir la codificación ("hello", "UTF-8"). x-www-form-urlencoded es siempre el tipo de resultado. El parámetro de codificación se refiere a sus datos de entrada. – jgre

+0

¡Gracias por tu respuesta! –

1

El JavaDoc tiene todos los detalles

+0

JavaDoc no menciona todos los posibles formatos de codificación ni veo una enlace a un ENUM que podría enumerarlos. – anon58192932

4

En primer lugar es necesario configurar el tipo de contenido como una 'x-www-form-urlencoded'. Luego, cualquiera que sea el contenido que desee codificar, codifíquelo con "UTF-8".

Por ejemplo:

Para ajustar el contenido a '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"); 


O si usted está usando alguna de JSP entonces usted puede escribir lo siguiente en encima de eso.

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

Y para usar URLEncoder:

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

He hecho: - HttpPost post = new HttpPost ("url"); - post.setHeader ("Content-Type", "application/x-www-form-urlencoded"); - String encodedString = URLEncoder.codificar ("hola", "UTF-8"); - StringEntity temp; - temp.setContentEncoding (encodedString); - post.setEntity (temp); y luego ejecuta un DefaultHttpClient con una publicación para el argumento. –

+0

¡Gracias por tu respuesta! –

+0

¡Espero que funcione ahora! – Sourabh

0

URLEncoder y URLDecoder ambos son una excepción Throwable y por lo tanto debe ser al menos encerrado por bloque try/catch. Sin embargo hay una manera más simple poco Litle usando android.net.Uri:

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

Esos son los métodos estáticos, utiliza UTF-8, disponible desde el API-1 y la tira no es una excepción.

0

Mi favorito personal:

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

devuelve una cadena vacía si el URL no tiene una parte de nombre de archivo, como https://stackoverflow.com/ o https://stackoverflow.com/questions/. Si hay una barra invertida en la parte del nombre del archivo, se conserva.

Puede quitar las últimas dos líneas si necesita el nombre corto con extensión en su lugar.