Извлечение шестнадцатеричных значений из URL-адреса, закодированного в процентах
Скажем, например, у меня есть 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 ответа
Лучший способ справиться с этим - проанализировать URL, используя либо java.net.URL
или же java.net.URI
, а затем используйте соответствующие геттеры для извлечения необходимых вам компонентов. Они позаботятся о декодировании любых% -кодированных частей соответствующим образом.
Проблема с вашей нынешней идеей в том, что %80
не представляет "80"
, или же 80
, Скорее он представляет байт, который в дальнейшем необходимо интерпретировать в контексте кодировки символов URL-адреса. И если кодировка UTF-8, то %80
должен сопровождаться еще одним или двумя байтами, кодированными на%... в противном случае это неправильное представление символа UTF-8.
Я действительно не вижу, что вы пытаетесь. Тем не менее, я попробую.
Когда вы получите эту строку:
"%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);