본문 바로가기
Spring

requestParam에 decoding 되는 현상

by GoodDev 2018. 9. 20.

원인
spring 의 org.springframework.web.filter.CharacterEncodingFilter 기능으로 인해서 
euckr의 스트링이 utf-8 로 디코딩 되는 현상으로 복원이 불가능 하므로,
해당 기능을 사용하지 않도록 처리 해야 합니다.



1. web.xml

<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>

*.do => request 는 utf-8 로 처리하도록 되어 있습니다.
그래서 해당 확장자 명을 html로 변경합니다.

하단에

<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>

html 확장자를 처리하도록 선언합니다.


2. Controller 처리
Raw => 8859_1 => eucKR => utf-8

String rawResultMsg = request.getParameter("ResultMsg")==null?"":request.getParameter("ResultMsg");
String eucResultMsg = new String(rawResultMsg.getBytes("8859_1"),"euc-kr");
String ResultMsg= new String(eucResultMsg.getBytes(), "utf-8");
위 코드를 해당 한글이 수신되는 부분에 추가


어떤 character set 인지 찾을 때 사용하세요...

       String encode = "";

  String [] charsets = {"UTF-8","EUC-KR","ISO-8859-1", "CP1251", "KSC5601"};


  for ( String charset: charsets ) {

    encode = URLEncoder.encode(PayMethod, charset);

    System.out.println("origin["+PayMethod+"], "+"encoded["+encode+"], charset["+charset+"]" );

  }

댓글