2010-09-23 4 views
2

Je reçois le codage html suivant comme une réponse json et n'a aucune idée de la façon de le décoder en chaîne html normale, qui est une étiquette achor en passant.Décodage html retourné comme réponse json - android

x3ca hrefx3dx22http:\/\/wordnetweb.princeton.edu\/perl\/webwn?sx3dstrandx22x3ehttp:\/\/wordnetweb.princeton.edu\/perl\/webwn?sx3dstrandx3c\/ax3e 

J'ai essayé java.net.UrlDecoder.decode sans aucune chance.

+0

Ce n'est pas du tout JSON. D'où viennent ces données qui prétendent que c'est JSON? – MatrixFrog

+0

voici la réponse JSON réelle [{"type": "text", "text": "Resentment - B \ x27Day est le deuxième album studio de la chanteuse américaine R \ x26B Beyoncé Knowles, publié le 4 septembre 2006, sur Columbia Records en collaboration avec Music World Music et Sony Urban Music, sa parution coïncide avec le vingt-cinquième anniversaire de Knowles \ ... "," language ":" en "}, {" type ":" url "," text ": "\ x3ca href \ x3d \ x22http: //en.wikipedia.org/wiki/Resentment_ (chanson) \ x22 \ x3ehttp: //en.wikipedia.org/wiki/Resentment_ (chanson) \ x3c/a \ x3e", "language": "fr"}] – Waqas

Répondre

1

Ce n'est pas un encodage que j'ai vu auparavant, mais il semble que xYZ (où Y et Z sont des chiffres hexadécimaux [0-9a-f]) signifie "le caractère dont le code ascii est 0xYZ". Je ne suis pas sûr de la façon dont la lettre x elle-même serait encodée, donc je recommanderais d'essayer de le savoir. Mais alors vous pouvez simplement faire une recherche et remplacer sur la regex x([0-9a-f]{2}), en obtenant l'entier représenté par les deux nombres hexadécimaux, puis en le transposant à char (ou something similar à cela).

Alors aussi, il ressemble à des barres obliques (et d'autres caractères - voyez si vous pouvez le savoir ...) ont toujours une barre oblique inverse devant eux, alors faites une autre recherche et remplacement pour cela.

+0

Vous devriez également essayer de comprendre comment les caractères Unicode au-dessus de 'ff' seraient représentés, et assurez-vous de modifier votre approche en conséquence. – MatrixFrog

+0

ça marche! Merci. – Waqas

+0

j'ai rencontré le même problème en récupérant des données json rarbic dans ce lien https://www.facebook.com/feeds/page.php?id=103622369714881&format=json pouvez-vous me dire s'il vous plaît qu'avez-vous fait? –

6

Le terme que vous recherchez est «Unités de code UTF8». Ces unités de code sont fondamentalement une barre oblique inverse, suivie d'un "x" et d'un code ASCII hexadécimal. J'ai écrit un peu la méthode de conversion pour vous:

public static String convertUTF8Units(String input) { 
    String part = "", output = input; 
    for(int i=0;i<=input.length()-4;i++) { 
     part = input.substring(i, i+4); 
     if(part.startsWith("\\x")) { 
      byte[] rawByte = new byte[1]; 
      rawByte[0] = (byte) (Integer.parseInt(part.substring(2), 16) & 0x000000FF); 
      String raw = new String(rawByte); 
      output = output.replace(part, raw); 
     } 
    } 

    return output; 
} 

Je sais, il est un peu élimé, mais cela fonctionne :)

+0

merci Keenora, mais je l'ai déjà fait en utilisant l'expression régulière – Waqas

+1

Merci beaucoup pour cela! – Alex

1

Merci !!

Attention, dans l'opérateur, l'opérateur doit être "< =" sinon un caractère ne peut pas être décodé.

for(int i=0;i<=input.length()-4;i++) {..}

Cheers!

-1

Cela fonctionne pour moi

public static String convertUTF8Units_version2(String input) throws UnsupportedEncodingException 
    { 
     return URLDecoder.decode(input.replaceAll("\\\\x", "%"),"UTF-8"); 
    }