studio - Codificación de URL en Android
urlencoder encode android studio (6)
No codificas la URL completa, solo partes de ella provienen de "fuentes no confiables".
String query = URLEncoder.encode("apples oranges", "utf-8");
String url = "http://stackoverflow.com/search?q=" + query;
Alternativamente, puede usar Strings.urlEncode (String str) de DroidParts que no arroja excepciones marcadas.
O usa algo como
String uri = Uri.parse("http://...")
.buildUpon()
.appendQueryParameter("key", "val")
.build().toString();
¿Cómo se codifica una URL en Android?
Pensé que era así:
final String encodedURL = URLEncoder.encode(urlAsString, "UTF-8");
URL url = new URL(encodedURL);
Si hago lo anterior, http://
en urlAsString
se reemplaza por http%3A%2F%2F
en encodedURL
y luego obtengo una java.net.MalformedURLException
cuando uso la URL.
Para Android, usaría String android.net.Uri.encode (String s)
Codifica los caracteres en la cadena dada como ''%'' - octetos escapados usando el esquema UTF-8. Deja las letras ("AZ", "az"), los números ("0-9") y los caracteres no reservados ("_- !. ~ ''() *") intactos. Codifica todos los demás personajes.
Ex/
String urlEncoded = "http://.com/search?q=" + Uri.encode(query);
También puedes usar este
private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~''%";
String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS);
es el método más simple
Voy a añadir una sugerencia aquí. Puede hacer esto, lo que evita tener que obtener bibliotecas externas.
Prueba esto:
String urlStr = "http://abc.dev.domain.com/0007AC/ads/800x480 15sec h.264.mp4";
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();
Puedes ver que en esta URL en particular, necesito tener esos espacios codificados para poder usarlos para una solicitud.
Esto aprovecha un par de características disponibles para ti en las clases de Android. Primero, la clase de URL puede dividir una url en sus componentes adecuados, por lo que no es necesario que realice ninguna tarea de búsqueda / reemplazo de cadenas. En segundo lugar, este enfoque aprovecha la característica de clase URI de escapar de los componentes correctamente cuando construye un URI a través de componentes en lugar de una sola cadena.
La belleza de este enfoque es que puede tomar cualquier cadena de URL válida y hacer que funcione sin necesidad de un conocimiento especial de la misma.
puedes usar los siguientes métodos
public static String parseUrl(String surl) throws Exception
{
URL u = new URL(surl);
return new URI(u.getProtocol(), u.getAuthority(), u.getPath(), u.getQuery(), u.getRef()).toString();
}
o
public String parseURL(String url, Map<String, String> params)
{
Builder builder = Uri.parse(url).buildUpon();
for (String key : params.keySet())
{
builder.appendQueryParameter(key, params.get(key));
}
return builder.build().toString();
}
El segundo es mejor que el primero.
try {
query = URLEncoder.encode(query, "utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}