2010-09-23 2 views
2

Я получаю следующий кодированный html как ответ json и не знаю, как его декодировать в обычную строку html, которая, кстати, является тегом ахора.Декодирование html возвращается как ответ json - android

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

Я пробовал java.net.UrlDecoder.decode без каких-либо ограничений.

+0

Это не JSON вообще. Где эти данные поступают от этого, утверждает, что это JSON? – MatrixFrog

+0

вот фактический ответ JSON [{«type»: «text», «text»: «Resentment - B \ x27Day - второй студийный альбом американской певицы Beyoncé Knowles от American R \ x26B, выпущенный 4 сентября 2006 года на Columbia Records в сотрудничестве с Music World Music и Sony Urban Music. Его выпуск совпал с Новым \ x27 двадцать пятым днем ​​рождения ... »,« language »:« en »}, {« type »:« url »,« text »: "\ x3ca href \ x3d \ x22http: //en.wikipedia.org/wiki/Resentment_ (песня) \ x22 \ x3ehttp: //en.wikipedia.org/wiki/Resentment_ (песня) \ x3c/a \ x3e", «language»: «en»}] – Waqas

ответ

1

Это не кодировка, которую я видел раньше, но она выглядит как xYZ (где Y и Z - шестнадцатеричные цифры [0-9a-f]) означает «символ, код ascii которого равен 0xYZ». Я не знаю, как будет кодироваться сама буква x, поэтому я бы рекомендовал попробовать ее выяснить. Но тогда вы можете просто найти и заменить на regex x([0-9a-f]{2}), получив целое число, представленное двумя шестнадцатеричными числами, а затем переведя его на char (или something similar).

Затем, похоже, что косые черты (и другие персонажи? Посмотрите, можете ли вы узнать ...) всегда имеют обратную косую черту перед ними, поэтому для этого нужно найти другую замену.

+0

Вы также должны попытаться выяснить, как будут отображаться символы юникода выше 'ff', и не забудьте соответствующим образом изменить ваш подход. – MatrixFrog

+0

он работает! Благодарю. – Waqas

+0

Я столкнулся с такой же проблемой при извлечении данных rarbic json по этой ссылке https://www.facebook.com/feeds/page.php?id=103622369714881&format=json можно сказать, пожалуйста, что вы сделали ?? –

6

Термин, который вы ищете, это «UTF8 Code Units». Эти единицы кода в основном являются обратным слэшем, а затем «х» и шестнадцатеричным кодом ascii. Я написал маленький метод конвертера для вас:

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

Я знаю, его немного затхлым, но это работает :)

+0

спасибо Keenora, но я уже сделал это, используя регулярное выражение – Waqas

+1

Большое спасибо за это! – Alex

1

спасибо !!

Позаботьтесь, оператор должен быть «< =» иначе один символ не может быть декодирован.

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

Ура!

-1

Это работает для меня

public static String convertUTF8Units_version2(String input) throws UnsupportedEncodingException 
    { 
     return URLDecoder.decode(input.replaceAll("\\\\x", "%"),"UTF-8"); 
    } 
Смежные вопросы