2011-12-20 2 views
4

Использование Java на Android Я изо всех сил пытаюсь преобразовать несколько специальных символов html.HTML специальный декодирование символов

До сих пор я пытался:

String myString = "%A32.00%20per%20month%B3"; 

Html.fromHtml(myString).toString(); => %A32.00%20per%20month%B3 
URLDecoder.decode(myString) => �2.00 per month� 
URLDecoder.decode(myString, "UTF-8") => �2.00 per month� 
URLDecoder.decode(myString, "ASCII") => �2.00 per month� 
org.apache.commons.lang.StringEscapeUtils.unescapeHtml4(myString) => %A32.00%20per%20month%B3 

Правильный выход должен быть => £ 2,00 за month³

+1

Вы уверены, что 'URLDecoder.decode (туЗЬптд, "UTF-8")' не делает правильное декодирование, но ваш выход просто не может отобразить '£' и '³' символы? – Thomas

+0

Apache commons StringEscapeUtils escapes/unescapes Html, который вам не нужен. Например. £ 2,00 в месяц³ <-> £ 2,00 в месяц ³ – proko

ответ

8

Ваша строка кодируется в ISO-8859-1, поэтому ASCII и UTF-8 не будут работать.

String myString = "%A32.00%20per%20month%B3"; 
URLDecoder.decode(myString, "ISO-8859-1"); 
// output: £2.00 per month³ 
+0

Хороший звонок @Floem, который сделал это – scottyab

2
public static void main(String[] args) throws UnsupportedEncodingException { 
    String before = "£2.00 per month³"; 
    String encoded = URLEncoder.encode(before, "UTF-8"); 
    String decoded = URLDecoder.decode(encoded, "UTF-8"); 
    System.out.println(encoded); 
    System.out.println(decoded); 
} 

В выходе я получаю:

%C2%A32.00+per+month%C2%B3 
£2.00 per month³ 

Ты что верно %A32.00%20per%20month%B3?

+0

Пятно на нем было введенной строкой (из стороннего веб-сервиса), которая, похоже, неправильно закодировала строку. Когда вы добавляете символ% C2 напротив символов, он работает правильно. Спасибо – scottyab

Смежные вопросы