ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [오류] code point [x,y]에 위치한 유니코드 문자 [한글] - 한글 인코딩 오류
    카테고리 없음 2024. 1. 12. 14:05

    ARNING: 값이 [list.do?page=1&perPageNum=10&key=t&word=자]인 HTTP 응답 헤더 [Location](이)가 유효하지 않은 값이므로 응답에서 제거되었습니다.

    java.lang.IllegalArgumentException: code point [51,088]에 위치한 유니코드 문자 [자]은(는), 0에서 255까지의 허용 범위 바깥에 있으므로 인코딩될 수 없습니다.

    at org.apache.tomcat.util.buf.MessageBytes.toBytesSimple(MessageBytes.java:310)

    at org.apache.tomcat.util.buf.MessageBytes.toBytes(MessageBytes.java:283)

    at org.apache.coyote.http11.Http11OutputBuffer.write(Http11OutputBuffer.java:389)

    at org.apache.coyote.http11.Http11OutputBuffer.sendHeader(Http11OutputBuffer.java:368)

    at org.apache.coyote.http11.Http11Processor.prepareResponse(Http11Processor.java:1048)

    at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:376)

    at org.apache.coyote.Response.action(Response.java:209)

    at org.apache.coyote.Response.sendHeaders(Response.java:437)

    at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:291)

    at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:250)

    at org.apache.catalina.connector.Response.finishResponse(Response.java:439)

    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:371)

    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)

    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)

    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)

    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1794)

    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)

    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)

    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)

    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

    at java.base/java.lang.Thread.run(Thread.java:833)

     

    웬만하면 오류코드를 구글에 검색하면 해결방법이 나오는데,

    이 오류코드는 인터넷에 검색해도  제대로 나오는 해결법이 없는 오류라 많이 당황했다. 

     

    톰캣 서버에서는 기본인코딩이 utf-8이 아니기 때문에 한글이 들어가는 쿼리를 request 객체로 즉시 가져올 때, 이런 오류가 발생하는 것 같다.

     

    jsp = "redirect:list.do?page=" + request.getParameter("page")

    + "&perPageNum=" + request.getParameter("perPageNum")

    + "&key=" + request.getParameter("key")

    + "&word=" + request.getParameter("word");

    break;

     

    위 처럼 쿼리스트링에 직접적으로 서버에서 가져온 데이터를 넣는것 보다, encoding 처리 후 넣어주면 해결된다.

     


     

     

    해결방법

     

     

    1.자바에서 URLEncoder.encode(String, "형식") 메서드를 사용한다.

    ex)

    jsp = "redirect:list.do?page=" + request.getParameter("page")

     

    jsp = "redirect:list.do?page=" + URLEncoder.encode(request.getParameter("page"), utf-8)

     

     

    2.

    jsp의 el객체에서 encodeURIComponent를 사용하면 된다.

     

    ex) <a href ="answerForm.do?title=${vo.title}"></a>

    <a href ="answerForm.do?title=${encodeURIComponent(vo.title)}"></a>

     


     

    인코딩이 안되있을 때 다음과 같은 오류가 뜰 때도 있었다

     

    java.lang.IllegalArgumentException:
    요청 타겟에서 유효하지 않은 문자가 발견되었습니다.

    유효한 문자들은 RFC 7230과 RFC 3986에 정의되어 있습니다.

    ✔ Solution
    톰캣 server.xml Connector
    relaxedQueryChars="[]()^|&quot;"를 추가해준다

     

     

Designed by Tistory.