JAvaエスケープ問題【java.lang.IllegalArgumentException:URLDecoder:Incomplete trailing escape(%)pattern】

1039 ワード

詳細なエラーは次のとおりです.
java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape (%) pattern     at java.net.URLDecoder.decode(URLDecoder.java:187)
私たちは中国語を知っていれば、ブラウザは必ずトランスコードしますが、トランスコード後のフォーマットは一般的に%の2文字で、つまりパーセントの後ろで、英語のアルファベットや数字をつなぎます!
しかし、パラメータにもともとパーセントがあると仮定すると、ブラウザは処理せず、decodeを使用して復号すると、javaプログラムは後に2文字あるはずだと思っていたので、結果はありませんでした.
エスケープ特殊文字%の問題の解決
単独で現れる%をトランスコード後の文字に置き換えるだけでいい、つまり%25です.
ここで強調すると、ネット上の多くの変更は以下の通りです.
estimateName = estimateName.replaceAll("%", "%25"); 1上のような書き方は間違っています.正しいものを全部置き換えたからです.  ここで私たちが理解しなければならないのは、すべてのパーセントではなく、単独で現れたパーセントです.
正しい変更:
estimateName = estimateName.replaceAll("%(?![0-9a-fA-F]{2})", "%25");

上の文字列は次の形式に復号されます(最後を参照).
%E6%97%A5%E6%B6%A8%E5%B9%85%E5%81%8F%E7%A6%BB%E5%80%BC%E8%BE%BE%E5%88%B07%25
[0-9 a-fA-F]{2})  これは正規表現で、%の後ろに数字またはアルファベット(大文字と小文字を含む)の文字が一致しないことを意味します.これで正しいものを排除し、残りはマッチング置換が必要です.
最後にurl符号化アドレスを添付します.
HTML URLコード  Java正しいURL復号方式:URLDecoder.decode