원인이 무엇 java.io.CharConversionException 와 EOF 또는 isHexDigit 메시지 in Tomcat?
문제
이 예외는 고추의 생산 catalina 로그에 간단한'getParameter()'호출합니다.
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)
나 때로는:
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)
해결책
그냥 가설을 세워 여기에.처럼 보인다는 URL-디코딩 매개 변수는 그 값이 실패(URL 을 인코딩을 의미한 인코딩을 어떤 문자를 사용하여%XX 또%XXXX 표기 XX 또는 XXXX 은 진수 코드의 캐릭터에서 ISO-8859-1 또는 유니코드).첫 번째 경우에 오류가 있기 때문에 일어나는 많지 않지 진수 문자를 후%문자입니다.두 번째 경우에는 이 될 수 있기 때문에 일어나는 문 후%특지 진수.
다른 팁
다른 것을 조사하는 URIEncoding 에 Tomcat"커넥터"를 구성합니다. 한 경우에 UTF-8 인코딩된 페이지를,그것은 인코딩합니다 URL 을 바이트 UTF-8,다음 URL 을 인코딩의 바이트는 필요합니다.그러나,기본적으로,Tomcat 생각하는 바이트는 ISO-8859-1,는 문제가 발생할 수 있습니다.
역도 진실:는 경우 페이지에서 ISO-8859-1,Tomcat's URIEncoding 로 설정되었습니다 UTF-8,비슷한 오류가 발생할 수 있습니다.
여기에는 유용한 토론 문제에 대해서 이 지역: Charset 에 함정 JSP/Servlet 컨테이너
제가 시작한 이 오류를 받을 때 사용자를 보내는'%'통해 ajax 요청을 합니다.밝혀 나지 않았을 탈출하기 전에 매개 변수를 만드는 요청을 합니다.료 작성까지 이 시나리오의과정에서 이 블로그 게시물
그것은 또한 수 이(Wikipedia):
가 존재하는 표준이 아닌 인코딩에 대한 유니코드 문자:%uxxxx,xxxx 유니코드 표시된 값을 네 가지로 진수 자리입니다.이 동작은 지정하지 않은 모든 RFC 고 거부되었으로 W3C.세 번째 에디션의 ECMA-262 여전히 포함 탈출(문자열)기능을 사용하는 이 구문,하지만 또한 에 encodeuri(uri)로 변환하는 기능을 UTF-8%로 인코딩되는 각 octet.
그래서 될 수 있는 사용 escape 함수에서 자바스크립트,하지만 이후 버전의 Tomcat 는 엄격한은 이러한 것들에 대해(5.5.17 이 슬라이드는 인코딩),만 지금은 당신이 시작하는 예외를 참조하십시오.