본문 바로가기
Spring

Spring Boot POST Encoding EUC-KR 한글깨짐(UTF-8)현상

by Gil Granger 2019. 11. 18.

지인이 결제모듈을 붙이는 과정에서 EUC-KR로 응답요청을 받아서 아무리 인코딩 설정을 해도 한글이 깨져서 나온다며 구글링해도 해결되지 않아 도움을 요청했다. 어떻게 처리해야할까?

 

 

 

간단히 요청 해볼 수 있는 Form을 만들어서 테스트해본다.
Filter에 의해 UTF-8 인코딩이 찍히고, 한글이 깨져 나온다!

 

 

기본적으로 Spring Boot 에서는 Encoding Filter 가 UTF-8로 기본 설정이 된다.

 

그렇기 때문에 Controller 에서 요청 파라미터를 받았을때 이미 한글이 깨진형태로 나오기때문에 복구할 수가 없는것으로 보인다.

 

 

필자의 해결책은 이렇다.

 

특정 URL만 UTF-8이 아닌 EUC-KR로 바꿔 사용해야 하기때문에 특정 URL에만 동작하는 필터를 하나더 추가한다.

 

이렇게 추가하게 되면 필터에 등록되어 매핑된 URL이 들어올때 거치게 된다.

필터 체인 막바지 부분에  EUC-KR 인코딩으로 설정되어 파라미터가 잘 인코딩 되어 나오는것을 알 수 있다 

 

 


혹시나 그래도 글씨가 깨진다면 인코딩되기전에 Request paramter에 접근하게 되면서 인코딩형태가 바뀐것인지 확인한다. (필자의 경우 디버깅을 하면서 보느라 의도치 않게 툴에서 미리 값에 접근하여 인코딩이 깨지는줄 모르고 삽질을 했다..

 

항상 해결될 수 있는 해결책은 아니라고 생각한다. 항상 상황은 다르게 주어질 수 있다. 

그래서 동작원리를 알아보도록 하자.

 

 

캐릭터셋을 지정하지 않는경우 기본적으로 사용되는 캐릭터셋 기본값은 "ISO-8859-1"이다. 

EncodingFilter을 타기전에는 인코딩이 기본값으로 설정되어있을 것이다.

 

 

Paramters Class

위 코드는 파라미터가 생성되는 로직의 한 부분이다.

이처럼 파라미터가 생성(접근)될때 url디코딩에 대한 부분이 보이고 캐릭터 셋에 맞춰서 파라미터에 추가하는것이 확인된다.

 

이와 같이 파라미터 생성 시점에따라 케릭터셋이 결정되어 생성 될 수 있는 것이다.

(결론적으로 저 파라미터가 생성(접근) 되기전에 캐릭터셋이 적절하게 세팅되어야 한다.)

 

그래서 파라미터 생성 되는것을 참고하여 경우에따라 필터 순서를 앞서 해야할수도있고 다른방법으로 해결해야할 수 있다.

 

아무리 구글링하여도 해결이 잘 되지 않는다면 이와 같은 설명을 참고하여 적절하게 사용되면 될것으로 보인다.

 

 

 

 

 

 

 

참고

http://gnujava.com/board/article_view.jsp?article_no=8087&menu_cd=58&idx_notice=NOTICE_FLAG+DESC%2C&board_no=37

 

https://hamait.tistory.com/355

https://m.blog.naver.com/PostView.nhn?blogId=duco777&logNo=220605479481&proxyReferer=https%3A%2F%2Fwww.google.com%2F

댓글