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 bytes

if (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 thrown

if ((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);

}

android urldecode解码,URLDecoder异常解决方法相关推荐

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

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

  2. Android studio出现AAPT2 aapt2-3.6.2-6040484-windows Daemon异常 解决方法

    Android studio出现AAPT2 aapt2-3.6.2-6040484-windows Daemon异常 解决方法 Android studio在编译时候出现 AAPT2 aapt2-3. ...

  3. variable ‘‘ of type ‘‘ referenced from scope ‘‘, but it is not defined 异常解决方法

    variable '' of type '' referenced from scope '', but it is not defined 异常解决方法 参考文章: (1)variable '' o ...

  4. [M]MagicTable转换异常解决方法

    [M]MagicTable转换异常解决方法 参考文章: (1)[M]MagicTable转换异常解决方法 (2)https://www.cnblogs.com/yiyun/p/5259384.html ...

  5. MathWorks.MATLAB.NET.Arrays.MWArray”的类型初始值设定项引发异常 解决方法

    MathWorks.MATLAB.NET.Arrays.MWArray"的类型初始值设定项引发异常 解决方法 参考文章: (1)MathWorks.MATLAB.NET.Arrays.MWA ...

  6. DataAccessResourceFailureException异常解决方法

    DataAccessResourceFailureException异常解决方法 参考文章: (1)DataAccessResourceFailureException异常解决方法 (2)https: ...

  7. Android webview 写入cookie的解决方法以及一些属性设置

    Android webview 写入cookie的解决方法以及一些属性设置 参考文章: (1)Android webview 写入cookie的解决方法以及一些属性设置 (2)https://www. ...

  8. Android Studio androidx 包冲突解决方法

    Android Studio androidx 包冲突解决方法 参考文章: (1)Android Studio androidx 包冲突解决方法 (2)https://www.cnblogs.com/ ...

  9. springboot springmvc 抛出全局异常解决方法

    springboot springmvc 抛出全局异常解决方法 参考文章: (1)springboot springmvc 抛出全局异常解决方法 (2)https://www.cnblogs.com/ ...

  10. Action请求后台出现Response already commited异常解决方法

    Action请求后台出现Response already commited异常解决方法 参考文章: (1)Action请求后台出现Response already commited异常解决方法 (2) ...

最新文章

  1. NeurIPS 2019 | 一种对噪音标注鲁棒的基于信息论的损失函数
  2. 在AE10.1环境下调试其他版本的程序
  3. PAT甲级1046 Shortest Distance:[C++题解]前缀和
  4. php把字符串变为数组_php将字符串转换为数组
  5. P1650 田忌赛马(贪心)
  6. 洛谷 P1027 Car的旅行路线
  7. WPF 反编译后错误处理
  8. codeforces #236 div2 简洁题解
  9. GPB | 陈润生/何顺民团队发布新版SmProt数据库,提供小蛋白丰富、可靠的系统性注释...
  10. java 搜索起始位置,从Java中的给定位置搜索字符
  11. Python+OpenCV:姿态估计(Pose Estimation)
  12. java压缩文件太慢_java 解压6万个ZIP文件,如何提升速度?
  13. 轻量级前端MVVM框架avalon - 初步接触
  14. c51语言转换ASCII码,ASCII 码和十六进制数的转换 -51单片机
  15. C语言程序设计之小超市管理系统
  16. HTML实现简单水平导航栏
  17. mah和mwh的关系?
  18. 2022年华为杯中国研究生数学建模竞赛B题思路
  19. DLS 深度受限搜索 狼羊 过河 问题 python 实现
  20. 3个结点的树和有3个结点的二叉树的所有不同的形态

热门文章

  1. 2018年最新北风网人工智能视频教程(完整版)
  2. 【MySQL】java应用开发与实践读书笔记
  3. 大学四年,这个Java自习路线,让我现在进了阿里
  4. JAVA电子书大礼包
  5. 微信小程序与公众号推送消息
  6. pyodbc 连接informix
  7. 大学计算机操作Windows7实验报告,实验报告 计算机操作系统-Windows 7
  8. 易如意php,易如意网络验证系统1.1【开源】
  9. ALOS_PALSAR_12.5m分辨率DEM数据下载
  10. 斐讯k1潘多拉专版固件_斐讯K1、K2路由器刷机Breed/华硕老毛子、梅林、潘多拉/openwrt固件...