URLDecoder对参数进行解码时候,代码如:

URLDecoder.decode(param,"utf-8");

有时候会出现类似如下的错误:

URLDecoder异常Illegal hex characters in escape (%)

这是因为传参有一些特殊字符,比如%号或者说+号,导致不能解析,报错

解决方法是:

public static String replacer(StringBuffer outBuffer) {String data = outBuffer.toString();try {data = data.replaceAll("%(?![0-9a-fA-F]{2})", "%25");data = data.replaceAll("\\+", "%2B");data = URLDecoder.decode(data, "utf-8");} catch (Exception e) {e.printStackTrace();}return data;}

URLDecoder源码:

public static String decode(String s, String enc)throws UnsupportedEncodingException{boolean needToChange = false;int numChars = s.length();StringBuffer sb = new StringBuffer(numChars > 500 ? numChars / 2 : numChars);int i = 0;if (enc.length() == 0) {throw new UnsupportedEncodingException ("URLDecoder: empty string enc parameter");}char c;byte[] bytes = null;while (i < numChars) {c = s.charAt(i);switch (c) {case '+':sb.append(' ');i++;needToChange = true;break;case '%':/** Starting with this instance of %, process all* consecutive substrings of the form %xy. Each* substring %xy will yield a byte. Convert all* consecutive  bytes obtained this way to whatever* character(s) they represent in the provided* encoding.*/try {// (numChars-i)/3 is an upper bound for the number// of remaining bytesif (bytes == null)bytes = new byte[(numChars-i)/3];int pos = 0;while ( ((i+2) < numChars) &&(c=='%')) {int v = Integer.parseInt(s.substring(i+1,i+3),16);if (v < 0)throw new IllegalArgumentException("URLDecoder: Illegal hex characters in escape (%) pattern - negative value");bytes[pos++] = (byte) v;i+= 3;if (i < numChars)c = s.charAt(i);}// A trailing, incomplete byte encoding such as// "%x" will cause an exception to be thrownif ((i < numChars) && (c=='%'))throw new IllegalArgumentException("URLDecoder: Incomplete trailing escape (%) pattern");sb.append(new String(bytes, 0, pos, enc));} catch (NumberFormatException e) {throw new IllegalArgumentException("URLDecoder: Illegal hex characters in escape (%) pattern - "+ e.getMessage());}needToChange = true;break;default:sb.append(c);i++;break;}}return (needToChange? sb.toString() : s);}

java基础之URLDecoder异常解决方法相关推荐

  1. java.lang.IllegalArgumentException: URLDecoder异常解决

    异常: Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex ...

  2. java verifyerror_java.lang.VerifyError 异常解决方法

    先看Log,由于混淆无法查看具体代码行,但通知反编译能大概猜到是哪个类里面报的错:但由于不是具体的异常,无法断定是什么问题. E/AndroidRuntime(19738): java.lang.Ve ...

  3. java.lang.OutOfMemoryError​异常解决方法

    java.lang.OutOfmemoryError: PermGen Space 的错误,导致项目无法正常运行. 出现这个错误的原因,总结一下: PermGen Space指的是内存的永久保存区,该 ...

  4. Android问题:java.lang.UnsatisfiedLinkError: No implementation found for异常解决方法

    java.lang.UnsatisfiedLinkError: No implementation found for异常解决方法 一天内遇到两次这个错误,被折磨一整天,关键是报错的原因还不一样,网上 ...

  5. java.net.SocketTimeoutException: Read timed out异常解决方法

    java.net.SocketTimeoutException: Read timed out异常解决方法 错误解析: 在请求的时候,服务器请求超时.在网上搜查之后,客户端没有在规定的时间内把数据传给 ...

  6. activeMQ高并发发送消息异常解决方法

    高并发发送消息异常解决方法: 现象:使用10个线程每100ms发送一条消息,大约3000多条后,出现异常,所有线程停 止: javax.jms.JMSException:Could not conne ...

  7. java项目启动时登录,Java项目启动时报错解决方法

    当前位置:我的异常网» Java Web开发 » Java项目启动时报错解决方法 Java项目启动时报错解决方法 www.myexceptions.net  网友分享于:2013-08-07  浏览: ...

  8. 断开的管道 java.io.IOException: Broken pipe 解决方法

    断开的管道 java.io.IOException: Broken pipe 解决方法 一.Broken pipe产生原因分析 1.当访问某个服务突然服务器挂了,就会产生Broken pipe; 2. ...

  9. Java基础篇:如何解决成员的访问和继承?

    Java基础篇:如何解决成员的访问和继承? 尽管子类包括超类的所有成员,它不能访问超类中被声明成private的成员.例如,考虑下面简单的类层次结构: /* In a class hierarchy, ...

  10. RXTXcomm.jar 读取串口数据时报 Underlying input stream returned zero bytes 异常解决方法

    RXTXcomm.jar 读取串口数据时报 Underlying input stream returned zero bytes 异常解决方法 一.示例程序 1.依赖 2.示例代码 3.测试读取文件 ...

最新文章

  1. RSync实现文件备份同步
  2. JavaScript 方法传参
  3. Python 学习笔记 - Memcached
  4. mysql学_MySQL学习(一)
  5. python画图如何调整图例位置_matplotlib中legend位置调整解析
  6. 2021-03-07 Nussbaum函数
  7. RabbitMQ--topic
  8. 那些有趣的电子漫画合集
  9. ibatis This SQL map does not contain a MappedStatement
  10. Java算法之只出现一次的数字
  11. python教程视频-Python基础视频教程(600集)【传智播客精品教程】
  12. perl-我的第一个程序
  13. intouch historian 配置
  14. 分享:无版权图片素材免费下载网站
  15. 详解JAVA实现支付宝接口编程
  16. 安装QT时遇到:canot start “d:\qt\vcredist\vcredist_x64.exe/norestart/q“:process failed to start :请求的操作需要提升
  17. AB-PLC之间通讯
  18. 微信小程序前端备忘录记事本搜索功能
  19. 《UNIX网络编程》第一步:编写自己的daytime客户端,并从daytime服务器获取时间
  20. 安卓应用改变logo图标和名称

热门文章

  1. python开发ios程序_使用Python开发iOS程序
  2. 论如何用cmd命令做出数字雨特效
  3. Tool -- 01 -- xml与map相互转换
  4. Correlation coefficients and appliction in fMRI Data
  5. 几款电子教室软件推荐
  6. 信息技术知识点汇总(必修)
  7. linux如何清理文件系统,最佳Linux文件系统清理工具
  8. 万能五笔2005输入法平台6.46版---试用手记
  9. 汽车电子_EMC测试_RE试验整改
  10. 纯正的国产工程项目管理软件分享