簡體   English   中英

從百分比編碼的URL中提取十六進制值

[英]Extract hexadecimal values from a percent encoded 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();
  }

解決此問題的最佳方法是使用java.net.URLjava.net.URI解析URL,然后使用相關的getter提取所需的組件。 這些將負責以適當的方式解碼任何%編碼的部分。

您當前想法的問題是%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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM