• 【URLDecoder】java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in es


    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})意思是'%'开始,但是后面两个字符不是数字,也不是字母。

  • 相关阅读:
    getopt for windows
    开源代码学习之Tinyhttpd
    GCC 中的编译器堆栈保护技术
    读《程序员的思维修炼》有感
    main之前初始化流程
    平均速度
    显示图案
    圆的面积和周长
    C#(Winform) Http 发送数据
    Android BaseAdapter的使用
  • 原文地址:https://www.cnblogs.com/anny0404/p/5464725.html
Copyright © 2020-2023  润新知