开发避坑指南(62):解决URLDecoder:Illegal hex characters in escape (%) pattern 异常

异常信息

java.lang.IllegalArgumentExceptionURLDecoderIllegal hex characters in escape (%) pattern - For input string: "食品"
	at java.net.URLDecoder.decode(URLDecoder.java:194)

异常分析

在对请求参数进行URLDecoder时发生上述异常。请求参数值为"85%食品级柠檬酸",请求参数包含百分号。该异常是由于URLDecoder在解码时遇到非法十六进制字符导致的,具体表现为字符串中的"%"被误认为是URL编码的起始符号,但后续字符"食品"不符合十六进制编码格式。URLDecoder要求%后必须跟随两个十六进制字符(0-9/a-f/A-F)才能正常解码。

解决办法

使用正则表达式预处理字符串,将“%”替换成 URL 编码中的百分号编码“%25”,替换后不需要跟两个十六进制字符,确保百分号正确传递。

String valueStr = value.replaceAll("%(?![0-9a-fA-F]{2})", "%25");

替换逻辑分解‌
(1)% 匹配‌

匹配字符串中的百分号字符,作为替换的基准点。

(2)(?![0-9a-fA-F]{2}) 负向先行断言‌

检查 % 后‌是否不跟随‌两位十六进制字符(0-9、a-f、A-F)。若不符合(如 %x、% 单独出现),则触发替换;若符合(如 %20),则保留原样。

(3)%25 替换值‌

将未编码的 % 替换为其URL编码形式 %25。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帧栈

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值