2012-01-23 9 views
10

Duplicar posibles:
How to do URL decoding in Java?¿Cómo decodificar URL en la Solicitud Android

estoy tratando de escribir una aplicación para Android, y se supone que debe recuperar el contenido de un URL de CDN, que siempre están URLEncoded. Por el bien de ejemplo, estoy usando una URL de youtube, porque están formateados de la misma manera.

public static String getText(String url) throws Exception { 
    URL website = new URL(url); 
    URLConnection connection = website.openConnection(); 
    BufferedReader in = new BufferedReader(
          new InputStreamReader(
           connection.getInputStream())); 

    StringBuilder response = new StringBuilder(); 
    String inputLine; 

    while ((inputLine = in.readLine()) != null) 
     response.append(inputLine); 

    in.close(); 

    return response.toString(); 
} 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    try { 
    String page = getText("http://www.youtube.com/watch?v=QH2-TGUlwu4"); 
    String[] temper = page.split("flashvars=\""); 
    page = temper[1]; 
    temper = page.split("\"  allowscriptaccess=\"always\""); 
    page = temper[0]; 
    temper = page.split("url_encoded_fmt_stream_map="); 
    page = temper[1]; 
    temper = page.split("fallback_host"); 
    page = temper[0]; 
    page = page.replaceAll("url%3D", ""); ** 
    page = URLDecoder.decode(page, "UTF-8"); ** 
    page = page.replaceAll("hd720&", "hd720"); ** 
    System.out.println(page); 

     // TODO code application logic here 
    } catch (Exception ex) { 
     Logger.getLogger(app.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

El código que se muestra es (probablemente) donde me está causando problemas. Las salidas System.out.println

http%3A%2F%2Fo-o.preferred.ord08s01.v3.lscache1.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Csource%252Cratebypass%252Ccp%26fexp%3D909708%252C907322%252C908613%26itag%3D44%26ip%3D99.0.0.0%26signature%3D2889261E861AF0E724519652960C1BF31DA5BABD.A621580215B6416151470893E2D07BDE7AFF081E%26sver%3D3%26ratebypass%3Dyes%26source%3Dyoutube%26expire%3D1327316557%26key%3Dyt1%26ipbits%3D8%26cp%3DU0hRTFNMVF9KUUNOMV9LRlhGOlNaUzBvTG1tdEp2%26id%3D407dbe4c6525c2ee&quality=large& 

quiero esa URL decodificada de una manera que puedo envolverlo en un método para descargarlo.

Ya he probado el método string.replaceAll(). En resumen, no funciona

Por favor, ayúdenme con respecto a esto.

+0

La versión de Android de [URLDecoder] (http://developer.android.com/reference/java/net/URLDecoder.html). –

Respuesta

50

La cadena que tiene allí es URL codificada.

String afterDecode = URLDecoder.decode(stingvalue, "UTF-8"); 
Cuestiones relacionadas