상세 컨텐츠

본문 제목

[jsp] javascript encodeURI() 한글 인코딩 시 jsp URLDecoder에서 한글 깨짐현상

WEB/JavaScript

by AlrepondTech 2016. 6. 3. 16:48

본문

반응형

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

출처: http://egloos.zum.com/aslike/v/3000604

ttp://aslike.egloos.com/3000604

javascript 에서 제공하는 encodeURI()와 encodeURIComponent() 함수는 기본적으로 UTF-8으로 인코딩을 합니다
 
이를 Query로 하여 jsp 페이지에 넘겨서
 
request.getParameter() 함수로 받고서 아무 의심없이 URLDecoder.decode() 함수를 사용했습니다
 
당연히 UTF-8으로 decode를 했지요
 
하지만 계속해서 한글이 깨져있습니다;;;
 
계속 원인을 찾던 중
 
tomcat이 Query를 미리 서버에 지정된 기본 문자셋으로 디코딩을 해버린다는 사실을 알았습니다
 
즉, request.getParameter()로 받은 결과가 인코딩 된 문자열이 아닌 이미 디코딩 된 문자열이었지요
 
즉, 기대한 값은 %EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94 과 같은 모양의 문자열인데
 
이미 저 값은 URLDeocder.decode( 문자열, 서버 기본 문자셋 ) 함수로 한번 디코딩 된 결과 같이 나온다는 거에요
 
많은 경우 서버 기본 문자셋이 MS-949 등이기 때문에 UTF-8으로 인코딩 된 값을 잘못 디코딩한 것이죠
 
잘못 디코딩된 녀석을 다시 디코딩 해봤자 한글이 깨져있는 것은 당연한 것이지요...
 
 
 
1. 해결 방법으로는 서버 기본 문자셋을 UTF-8으로 바꿔버리는 방법과...
 
 
 
2. 데이터의 양이 늘어나지만 encodeURI() 또는 encodeURIComponent() 의 결과를 한번 더 인코딩 해버리는 방법도 있습니다
 
encodeURIComponent( encodeURIComponent( plainText ) );  // 이렇게요
 
그리고 jsp에서는 URLDecoder.decode() 함수를 한번만 ( 한번은 자동으로 디코딩을 수행하기 때문에 ) 호출하면 됩니다
 
이렇게 될 경우 tomcat이 자동으로 디코딩한 결과는 원래 기대 값인 인코딩 된 값
 
%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94 과 같은 모양의 문자열
 
이 되고, 이를 URLDecoder.decode() 함수로 제대로 디코딩 해주기 때문에 원하는 결과 값이 나오게 됩니다
 

 

 

=================================

=================================

=================================

 

 

반응형


관련글 더보기

댓글 영역