[英]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.URL
或java.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.