12

この例外は、単純な 'getParameter()' 呼び出しで本番環境のカタリナ ログに表示されます。

警告: パラメータ: 文字のデコードに失敗しました。パラメータがスキップされました。

java.io.CharConversionException: EOF
    org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:82) で
    org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:48) で
    org.apache.tomcat.util.http.Parameters.urlDecode(Parameters.java:411) で
    org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:393) で
    org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:509) で
    org.apache.tomcat.util.http.Parameters.handleQueryParameters(Parameters.java:266) で
    org.apache.catalina.connector.Request.parseParameters (Request.java:2361) で
    org.apache.catalina.connector.Request.getParameter(Request.java:1005) で
    org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:353) で
    javax.servlet.ServletRequestWrapper.getParameter(ServletRequestWrapper.java:158) で

または時々:

java.io.CharConversionException: isHexDigit
    org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:87) で
    org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:48) で
    org.apache.tomcat.util.http.Parameters.urlDecode(Parameters.java:411) で
    org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:393) で
    org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:509) で
    org.apache.tomcat.util.http.Parameters.handleQueryParameters(Parameters.java:266) で
    org.apache.catalina.connector.Request.parseParameters (Request.java:2361) で
    org.apache.catalina.connector.Request.getParameter(Request.java:1005) で
    org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:353) で
    javax.servlet.ServletRequestWrapper.getParameter(ServletRequestWrapper.java:158) で
4

4 に答える 4

5

ここで仮定するだけです。パラメータまたはその値のURLデコードが失敗したようです(URLエンコードとは、%XXまたは%XXXX表記を使用して一部の文字をエンコードすることを意味します。XXまたはXXXXは、ISO-8859-1またはUnicodeの文字の16進コードです)。最初のケースでは、%文字の後に十分な16進文字がないため、エラーが発生している可能性があります。2番目のケースでは、%文字の後の文字が16進数ではないため、これが発生している可能性があります。

于 2008-09-19T21:54:23.727 に答える
2

調査すべきもう 1 つのことは、 Tomcat の「コネクタ」構成の URIEncodingです。リンクが UTF-8 でエンコードされたページにある場合は、URL を UTF-8 でバイトにエンコードし、次に必要なバイトをすべて URL エンコードします。ただし、デフォルトでは、Tomcat はこれらのバイトが ISO-8859-1 であると認識し、問題が発生する可能性があります。

逆の場合もあります。ページが ISO-8859-1 で、Tomcat の URIEncoding が UTF-8 に設定されている場合、同様のエラーが発生する可能性があります。

この分野の問題に関する有益な議論は次のとおりです。JSP/サーブレットコンテナの文字セットの落とし穴

于 2008-09-24T16:38:39.530 に答える
2

ユーザーが ajax リクエストで「%」を送信したときに、このエラーが発生し始めました。リクエストを行う前にパラメーターをエスケープしていなかったことがわかりました。このシナリオと修正の完全な説明は、このブログ投稿で説明されています

于 2010-08-13T03:11:10.730 に答える
1

これも(ウィキペディアから)可能性があります:

Unicode文字には非標準のエンコーディングがあります:%uxxxx、ここでxxxxは4つの16進数で表されるUnicode値です。この動作はRFCで指定されておらず、W3Cによって拒否されています。ECMA-262の第3版には、この構文を使用するescape(string)関数だけでなく、UTF-8に変換して各オクテットをパーセントエンコードするencodeURI(uri)関数も含まれています。

したがって、Javascriptで古いエスケープ関数を使用することもできますが、Tomcatの新しいバージョンではそのようなことについてより厳密になっているため(5.5.17ではこのエンコーディングをスライドさせます)、例外が発生し始めたのは今だけです。

于 2009-04-10T15:57:24.747 に答える