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() 함수로 제대로 디코딩 해주기 때문에 원하는 결과 값이 나오게 됩니다


출처 : http://allinfo.tistory.com/1095

'Server > Encoding' 카테고리의 다른 글

[Ajax] euc-kr 서버 한글 깨짐 해결  (0) 2016.12.08
[WAS] Tomcat server.xml utf 8 encoding  (0) 2015.01.08
[Encode] Spring POST/GET URI Encoding  (0) 2014.10.12

+ Recent posts