例如,假设我的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();
}
答案 0 :(得分:3)
处理此问题的最佳方法是使用java.net.URL
或java.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);