Java调用 URLDecoder.decode(str, "UTF-8"); 抛出以上的异常,其主要原因是% 在URL中是特殊字符,需要特殊转义一下,

上面的字符串中'%'是一个中文字符'是',而转换的实现是将%后面的两个字符一起转为一个16进制数。拿"%是"来转换数字,肯定会有NumberFormatException异常。

类似的如果请求字符串中有'+',也会有问题。因为'+'被当做空格使用了。

一个解决办法就是将%替换为%25。

data = data.replaceAll("%(?![0-9a-fA-F]{2})", "%25");
data = data.replaceAll("\\+", "%2B");
data = URLDecoder.decode(data, "utf-8");

这里使用了一个特殊正则表达式:零宽负向先行断言(zero-width negative lookahead assertion),模式为(?!pattern),代表字符串中的一个位置,紧接该位置之后的字符序列不能匹配pattern。%(?![0-9a-fA-F]{2})意思是'%'开始,但是后面两个字符不是数字,也不是字母。

 

相关文章:

  • 2021-07-26
  • 2022-12-23
  • 2022-12-23
  • 2021-11-14
  • 2021-09-17
  • 2021-09-22
  • 2021-10-11
  • 2021-12-22
猜你喜欢
  • 2021-08-11
  • 2022-12-23
  • 2022-12-23
  • 2021-11-20
  • 2022-01-22
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案