원인
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+"]" );
}
댓글