0

例如,假设我的 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();
  }
4

2 回答 2

3

处理这个问题的最好方法是使用java.net.URLor解析 url java.net.URI,然后使用相关的 getter 来提取您需要的组件。这些将负责以适当的方式解码任何 % 编码的部分。

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

于 2011-12-27T14:12:04.807 回答
1

我真的不明白你在尝试什么。不过,我会试一试。

  • 当你得到这个 String:"%80"并且你想得到这个string "80"时,你可以使用这个:

    String str = "%80";
    String hex = str.substring(1); // Cut off the '%'
    
  • 如果您尝试从中提取 0x80128十进制):

    String str = "%80";
    String hex = str.substring(1); // Cut off the '%'
    int value = Integer.parseInt(hex, 16);
    
  • 如果您尝试将 int 转换为其十六进制表示,请使用以下命令:

    String hexRepresenation = Integer.toString(value, 16);
    
于 2011-12-27T14:08:08.437 回答