Was sind die Ursachen java.io.CharConversionException mit EOF oder isHexDigit Nachrichten in Tomcat?

StackOverflow https://stackoverflow.com/questions/105551

  •  01-07-2019
  •  | 
  •  

Frage

Diese Ausnahme Paprika unserer Produktion catalina Protokolle auf einem einfachen 'getParameter ()' nennen.

WARNING: Parameters: Character decoding failed. Parameter skipped.

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

oder manchmal:

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

Lösung

Just hypothesizing hier. Scheint, wie die URL-Dekodierung von Parametern oder ihre Werte nicht (URL-Codiermittel einige Zeichen, codierend das XX% oder% XXXX Notation wobei XX oder XXXX ist der hexadezimale Code des Zeichens in ISO-8859-1 oder Unicode). Im ersten Fall kann der Fehler passiert, weil es nicht genügend hexadezimale Zeichen nach dem Zeichen% ist. Im zweiten Fall könnte dies geschehen, weil ein Zeichen nach dem Zeichen% nicht hexadezimal ist.

Andere Tipps

Eine andere Sache zu untersuchen, ist die URIEncoding in Ihrem Tomcat "Connector" Konfiguration. Wenn die Verbindung in einer UTF-8 codiert Seite ist, wird es die URL zu Bytes mit UTF-8, dann URL kodieren einem der Bytes, die sie benötigen, codieren. Jedoch standardmäßig, denkt Tomcat, dass diese Bytes sind ISO-8859-1, was zu Problemen führen kann.

Die inverse kann auch wahr sein. Wenn die Seite ISO-8859-1 ist, und URIEncoding Tomcat wurde auf UTF-8, ein ähnlicher Fehler gesetzt worden könnte dazu führen,

Hier ist eine nützliche Diskussion über die Probleme in diesem Bereich: charset Pitfalls in JSP / Servlet-Container

begann ich diesen Fehler empfangen, wenn Anwender wurden ‚%‘ über einen Ajax-Request sendet. Stellt sich heraus, ich war nicht die Parameter zu entkommen, bevor die Anforderung zu machen. Ein vollständiger aufzuschreiben dieses Szenarios und fix in diesem Blog-Post

Es könnte auch dies sein (aus Wikipedia):

Es gibt eine Nicht-Standard-Kodierung für Unicode-Zeichen:% uxxxx, wobei xxxx ein Unicode-Wert als vier hexadezimale Ziffern dargestellt ist. Dieses Verhalten wird von keinem RFC und wird von der W3C abgelehnt. Die dritte Auflage von ECMA-262 umfasst noch eine Flucht (string) Funktion, die diese Syntax verwendet, sondern auch eine encodeURI (uri) -Funktion, die in UTF-8 konvertiert und Prozent-codiert jedes Oktett.

So können Sie die alte Escape-Funktion in Javascript verwenden könnten, aber da spätere Versionen von Tomcat strenger sind über solche Dinge (5.5.17 diese Codierung durchgehen lassen), erst jetzt beginnen Sie Ausnahmen zu sehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top