java基础之URLDecoder异常解决方法
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异常解决方法相关推荐
- java.lang.IllegalArgumentException: URLDecoder异常解决
异常: Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex ...
- java verifyerror_java.lang.VerifyError 异常解决方法
先看Log,由于混淆无法查看具体代码行,但通知反编译能大概猜到是哪个类里面报的错:但由于不是具体的异常,无法断定是什么问题. E/AndroidRuntime(19738): java.lang.Ve ...
- java.lang.OutOfMemoryError异常解决方法
java.lang.OutOfmemoryError: PermGen Space 的错误,导致项目无法正常运行. 出现这个错误的原因,总结一下: PermGen Space指的是内存的永久保存区,该 ...
- Android问题:java.lang.UnsatisfiedLinkError: No implementation found for异常解决方法
java.lang.UnsatisfiedLinkError: No implementation found for异常解决方法 一天内遇到两次这个错误,被折磨一整天,关键是报错的原因还不一样,网上 ...
- java.net.SocketTimeoutException: Read timed out异常解决方法
java.net.SocketTimeoutException: Read timed out异常解决方法 错误解析: 在请求的时候,服务器请求超时.在网上搜查之后,客户端没有在规定的时间内把数据传给 ...
- activeMQ高并发发送消息异常解决方法
高并发发送消息异常解决方法: 现象:使用10个线程每100ms发送一条消息,大约3000多条后,出现异常,所有线程停 止: javax.jms.JMSException:Could not conne ...
- java项目启动时登录,Java项目启动时报错解决方法
当前位置:我的异常网» Java Web开发 » Java项目启动时报错解决方法 Java项目启动时报错解决方法 www.myexceptions.net 网友分享于:2013-08-07 浏览: ...
- 断开的管道 java.io.IOException: Broken pipe 解决方法
断开的管道 java.io.IOException: Broken pipe 解决方法 一.Broken pipe产生原因分析 1.当访问某个服务突然服务器挂了,就会产生Broken pipe; 2. ...
- Java基础篇:如何解决成员的访问和继承?
Java基础篇:如何解决成员的访问和继承? 尽管子类包括超类的所有成员,它不能访问超类中被声明成private的成员.例如,考虑下面简单的类层次结构: /* In a class hierarchy, ...
- RXTXcomm.jar 读取串口数据时报 Underlying input stream returned zero bytes 异常解决方法
RXTXcomm.jar 读取串口数据时报 Underlying input stream returned zero bytes 异常解决方法 一.示例程序 1.依赖 2.示例代码 3.测试读取文件 ...
最新文章
- RSync实现文件备份同步
- JavaScript 方法传参
- Python 学习笔记 - Memcached
- mysql学_MySQL学习(一)
- python画图如何调整图例位置_matplotlib中legend位置调整解析
- 2021-03-07 Nussbaum函数
- RabbitMQ--topic
- 那些有趣的电子漫画合集
- ibatis This SQL map does not contain a MappedStatement
- Java算法之只出现一次的数字
- python教程视频-Python基础视频教程(600集)【传智播客精品教程】
- perl-我的第一个程序
- intouch historian 配置
- 分享:无版权图片素材免费下载网站
- 详解JAVA实现支付宝接口编程
- 安装QT时遇到:canot start “d:\qt\vcredist\vcredist_x64.exe/norestart/q“:process failed to start :请求的操作需要提升
- AB-PLC之间通讯
- 微信小程序前端备忘录记事本搜索功能
- 《UNIX网络编程》第一步:编写自己的daytime客户端,并从daytime服务器获取时间
- 安卓应用改变logo图标和名称