2011-12-27 4 views
0

Скажем, например, у меня есть URL-адрес, содержащий следующий процентный кодированный символ:% 80
Это, очевидно, не символ ascii.
Как можно преобразовать это значение в соответствующую шестую строку в Java. я попытался следующие, не luck.Result должно быть 80.Извлечь шестнадцатеричные значения из процента закодированного URL

public static void main(String[] args) { 
     System.out.print(byteArrayToHexString(URLDecoder.decode("%80","UTF-8").getBytes())); 
    } 
    public static String byteArrayToHexString(byte[] bytes) 
    { 
     StringBuffer buffer = new StringBuffer(); 
     for(int i=0; i<bytes.length; i++) 
     { 
     if(((int)bytes[i] & 0xff) < 0x10) 
     buffer.append("0"); 
     buffer.append(Long.toString((int) bytes[i] & 0xff, 16)); 
     } 
     return buffer.toString(); 
    } 
+0

Если вам нужно «80», почему бы вам просто не пропустить символ процента? Кстати, для чего вам это нужно? - Кроме того, обратите внимание, что символы Java являются 16-битными, т. Е. Вы получите 2 байта, и в зависимости от символа оба байта могут быть ненулевыми (т. Е. Не 0x00). – Thomas

+0

Мне нужно извлечь содержимое бинарного SMS из канала, url отправлен в следующем формате: http: // localhost: 8080/rest/MO? Source_no = 13013 & dest_no =% 2B2304232381 & message =% 00 +% 11% 15% 00% 15% 00% 00% 00% 00.% 81s% 16% БСГ% D9% 89% B8lQi% 8D% EA% D6% F2% С1% 7B% 01% 3DL% D9% 1B% В4 & UDH =% 02P% 00 'Мне нужно декодировать параметр сообщения. Некоторые персонажи находятся в HEX, остальные - в ascii. Я думал, что URLDecoder сможет это сделать. Вы правы в том, что я могу реализовать это, но мне интересно, есть ли какие-либо функции для этого. – krishnen

+0

Эти параметры, отличные от ascii, не являются частью какой-либо шестнадцатеричной строки, так почему вы хотите снова преобразовать ее в шестую? Просто используйте 'URLDecoder.decode (...)', что будет делать. Я не вижу смысла переводить '' '('% 80') в шестую строку снова. – Thomas

ответ

3

Лучший способ справиться с этим, чтобы разобрать URL, используя либо java.net.URL или java.net.URI, а затем использовать для получения необходимых компонентов. Они позаботятся об декодировании любых% -кодированных частей соответствующим образом.

Проблема с вашей текущей идеей заключается в том, что %80 не представляет "80", или 80. Скорее, он представляет собой байт, который также нуждается в интерпретации в контексте кодировки символов URL. И если кодировка UTF-8, то за %80 должен следовать один или два более% -кодированных байтов ... в противном случае это неправильное представление символа UTF-8.

1

Я не очень понимаю, что вы пытаетесь. Тем не менее, я попробую.

  • Когда вы получили эту строку: "%80" и вы хотите получили строку"80", вы можете использовать это:

    String str = "%80"; 
    String hex = str.substring(1); // Cut off the '%' 
    
  • Если вы пытаетесь извлечь значение 0x80 (который составляет 128 в десятичной форме):

    String str = "%80"; 
    String hex = str.substring(1); // Cut off the '%' 
    int value = Integer.parseInt(hex, 16); 
    
  • Если вы пытаетесь преобразовать Int в шестнадцатеричный использования представления следующим образом:

    String hexRepresenation = Integer.toString(value, 16); 
    
Смежные вопросы