【学习笔记】【JAVA】掺杂着%为编码的含义,也能能解出正确的URL

tech2022-11-03  129

【参考地址】:URLDecoder: Incomplete trailing escape (%) pattern错误处理

【代码部分】:

import java.io.UnsupportedEncodingException; import java.net.URLDecoder; public class ConverPercent { //判断是否为16进制数 public static boolean isHex(char c){ if(((c >= '0') && (c <= '9')) || ((c >= 'a') && (c <= 'f')) || ((c >= 'A') && (c <= 'F'))) return true; else return false; } public static String convertPercent(String str){ StringBuilder stringBuilder = new StringBuilder(str); for(int i = 0; i < stringBuilder.length(); i++){ char c = stringBuilder.charAt(i); //判断是否为转码符号% if(c == '%'){ if(((i + 1) < stringBuilder.length() -1) && ((i + 2) < stringBuilder.length() - 1)){ char first = stringBuilder.charAt(i + 1); char second = stringBuilder.charAt(i + 2); //如只是普通的%则转为%25 if(!(isHex(first) && isHex(second))) stringBuilder.insert(i+1, "25"); } else{//如只是普通的%则转为%25 stringBuilder.insert(i+1, "25"); } } } return stringBuilder.toString(); } public static void main(String[] args) throws UnsupportedEncodingException{ String test = "http://www.baidu.com?%e4%b8%ad%e5%9b%bd123%"; //URLDecoder.decode(test, "utf8");//如直接接就会报如题的错误。 String url = convertPercent(test); System.out.println(url); System.out.println(URLDecoder.decode(url,"utf8")); } }

【结果输出】: 【注】:这种属于字符没有做编码导致的,如果正常编码不会出现。 【补充知识】:

// 也可以使用正则表达式 %(?![0-9a-fA-F]{2}) // 该正则表达式的意思是:不匹配%后面两位为数字或字母(包括大小写)的字符 src_text = src_text.replaceAll("%(?![0-9a-fA-F]{2})", "%25"); src_text = URLDecoder.decode(src_text, encrypt);
最新回复(0)