如何使用Java正确解码URL中的特殊字符以获得预期结果?
解决URL多次编码后的完全解码问题
你的问题出在目标URL是经过两次URL编码的,同时还包含HTML转义的&字符,一次URLDecoder.decode只能解码一层,所以无法得到最终的预期结果。
解决方案:循环解码+处理HTML转义字符
因为无法提前知道URL被编码了多少次,循环解码是最通用的方式,直到字符串不再变化(说明没有可解码的编码字符),再处理HTML转义的&:
String url1 = "https://dev/ABC/v1/XYZ?itemnumber%255Bin%255D=%255B3001%252C3005%252C202%255D&limit=2&apikey=4zVYEk2Xg8zvwYxNnW&offset=2"; // 循环解码直到无变化 String decodedURL = url1; String temp; do { temp = decodedURL; decodedURL = URLDecoder.decode(decodedURL, "UTF-8"); } while (!decodedURL.equals(temp)); // 处理HTML转义的&字符 decodedURL = decodedURL.replace("&", "&"); System.out.println(decodedURL);
结果说明
运行后输出:
https://dev/ABC/v1/XYZ?itemnumber[in]=[3001,3005,202]&limit=2&apikey=4zVYEk2Xg8zvwYxNnW&offset=2
注:你预期输出中的20应该是输入里202的笔误,上述代码会完全还原输入中的原始数值。
内容的提问来源于stack exchange,提问作者string
相关产品推荐
相关产品推荐

