urldecode一下,再decode一下,前后一致即未encode过,前后不一致即encode过。(具体原理可参看URLDecoder的源码)
看了其他几位同学的回答。简单的补充一下:
1、对于"a-z", "A-Z", "0-9", ".", "-", "*", "_",encode/decode前后不产生任何变化,所以实际上无需判断;
2、" "被转换成"+",如果原字符串本来就含有"+",上述方法无效;
3、其他的字符,根据不同的字符集先被转换成一到多个byte,然后每个byte被表示成类似"%xy"的字符串,其中xy是该byte值的16进制表示形式。所以对于原字符串本来含有"%"或者"%xy",上述方法也无效,对于"%xy",如果xy为非法字符,则会抛出IllegalArgumentException。
所以如果需要得到精确的结果,需要自己另加额外的控制标志位。