본문 바로가기

개발

톰켓 한글 setCharacterEncoding 안되는 이유, jsp,servlet 한글 인코딩 문제, 웹 브라우져에 따른 파라미터 처리방식-1

2014.04.27. 03:48

이전에 한글이 콘솔창에 출력이 안되서 글을 썻는데 그것도 안되는 문제가 발생해서 자세하게 공부하고 해결 방법을 찾으려함.

 

 

String name = request.getParameter("name");

request.setCharacterEncoding("euc-kr");

String address = rquest.getParameter("address");

 

이런 코드가 있을때 파라미터로 name을 받고 케릭터 셋을 euc-kr로 

 

하는것이 아니라

 

케리터 셋을 지정하기 전에 파라미터 값이 사용되면 모든 

 

파라미터값이 기본 캐릭터 셋을 이용해서 디코딩된다. 

 

 

따라서 위 코드는 name파라미터와 address파라미터 모두 기본 인코딩 

 

설정인 iso-8859-1을 이용해서 디코딩 된다. 

 

 

 

setEncoding을 사용하지 않을 경우 기본적으로 적용되는 

 

캐릭터 셋은 iso-8859-1인데 이것은 서유럽언어를 지원하는 것이다.

 

익스플로러에서 오른쪽 클릭해서 보면 기본 케릭터셋이 서유럽인것을 

 

알 수 있다.

 


 

이래서 한글이 전해지면 깨졌던것이다. 

 

어떤 케릭터 셋을 사용할 지의 여부는 get 방식과 post방식에 따라서

 

달라진다.

 

 

 

get방식 이용시 파라미터 전송방법에 따라서 인코딩도 결정되는데

 

1. <a> 태크의 링크에 쿼리문자열 추가시

2. html 폼의 method 속성값을 get으로 지정해서 폼을 전송시

3. 웹 브라우저 주소에 직접 쿼리 문자열 포함한 url입력

 

1,2번은 웹 페이지 인코딩을 사용하지만 

3번의 경우 웹 브라우저마다 다르다.

 

 

이것을 모르고 할때 크롬과 웹 브라우져의 결과값이 달랐는데 이래서

 

다른 결과값이 나온것 같다.

 

 

 

익스플로러는 현재 웹 브라우저에 선택되어 있는 캐릭터 셋을 이용해서 

 

파라미터 값을 인코딩하고 크롬 경우에는 utf-8 캐릭터 셋을 이용해서 

 

인코딩 한 url을 웹 서버에 요청하게 된다. 

 

 

 

was마다 get 방식의 마라미터 값을 사용하는 기본 캐릭터 셋도 다른다!!!!

 

톰켓은 get방식으로 파라미터 값을 읽어올때 기본적으로 iso-8859-1셋을 

 

사용해서 웹 브라우져에서 euc-kr이나 utf-8을 이용해서 인코딩한 

 

파라미터를 올바르게 읽어올 수 없다. 또 톰켓은 get방식으로 전송된 

 

파라미터에 대해서는 request.setCharacterEncoding()메서드로 지정한 

 

캐릭터 셋이 적용되지 않는다. 그래서 톰켓에서 인코딩을 처리 하려면 

 

다른 방법으로 해야한다.

 

 

<출처>

최범균의 jsp2.2 웹프로그래밍

ISO  - http://ko.wikipedia.org/wiki/ISO/IEC_8859