从百分比编码的URL中提取十六进制值

时间:2011-12-27 13:58:18

标签: java percent-encoding urldecode

例如,假设我的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 个答案:

答案 0 :(得分:3)

处理此问题的最佳方法是使用java.net.URLjava.net.URI解析网址,然后使用相关的getter提取所需的组件。这些将负责以适当的方式解码任何% - 编码部分。

您当前想法的问题是%80不代表"80"80。相反,它表示一个字节,进一步需要在URL的字符编码的上下文中进行解释。如果编码是UTF-8,那么%80之后需要再加上一个或两个%编码的字节......否则这是一个格式错误的UTF-8字符表示。

答案 1 :(得分: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);