O que causa java.io.CharConversionException com mensagens EOF ou isHexDigit em Tomcat?

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

  •  01-07-2019
  •  | 
  •  

Pergunta

Este pimentas exceção nossos registros Catalina produção de um simples 'getParameter ()' chamada.

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)

ou às vezes:

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)
Foi útil?

Solução

Apenas hypothesizing aqui. Parece que os meios (que codifica o URL que codificam alguns caracteres usando a notação% XX ou XXXX% onde XX ou XXXX é o código hexadecimal do carácter na norma ISO-8859-1 ou Unicode) de parâmetros ou os seus valores falhar descodificar URL. No primeiro caso, o erro pode estar acontecendo porque não há suficiente caracteres hexadecimais após o caractere%. No segundo caso, isso pode estar acontecendo porque um caractere após o caractere% não é hexadecimal.

Outras dicas

Outra coisa a investigar é o URIEncoding em sua Tomcat "Connector" configuração. Se o link está em uma página codificada UTF-8, que irá codificar o URL de bytes com UTF-8, em seguida, URL codificar qualquer um dos bytes que precisam dele. No entanto, por padrão, Tomcat pensa que esses bytes são ISO-8859-1, que pode levar a problemas.

O inverso também pode ser verdade: se a página é ISO-8859-1, e URIEncoding do Tomcat foi definida para UTF-8, um erro semelhante pode resultar

.

Aqui está uma discussão útil sobre as questões nesta área: charset Armadilhas em JSP / Servlet Containers

comecei a receber esse erro quando os usuários estavam enviando '%' através de uma solicitação ajax. Acontece que eu não estava escapando os parâmetros antes de fazer o pedido. A gravação completa-se deste cenário e correção é abrangido por este blog

Também poderia ser esse (de Wikipedia):

Existe uma codificação de não-padrão para caracteres Unicode:% uxxxx, onde xxxx é um valor Unicode representada como quatro dígitos hexadecimais. Esse comportamento não é especificado por qualquer RFC e foi rejeitado pelo W3C. A terceira edição do ECMA-262 ainda inclui uma função de escape (string) que usa essa sintaxe, mas também uma função encodeURI (URI) que se converte em UTF-8 e cento-codifica cada octeto.

Então, você poderia estar usando a função de escape de idade em Javascript, mas desde que versões posteriores do Tomcat são mais rigorosas sobre essas coisas (5.5.17 deixar essa codificação de slides), só agora está começando a ver exceções.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top