Извлечение шестнадцатеричных значений из URL-адреса, закодированного в процентах - PullRequest
0 голосов
/ 27 декабря 2011

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

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

Ответы [ 2 ]

3 голосов
/ 27 декабря 2011

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

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

1 голос
/ 27 декабря 2011

Я действительно не вижу, что вы пытаетесь.Однако я попробую.

  • Когда у вас есть эта строка: "%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);
    
...