이전에 한글이 콘솔창에 출력이 안되서 글을 썻는데 그것도 안되는 문제가 발생해서 자세하게 공부하고 해결 방법을 찾으려함.
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
'개발' 카테고리의 다른 글
Http 기본 메소드 제한 (0) | 2016.07.01 |
---|---|
웹페이지 한글 출력,servlet 한글 출력,물음표 표시 해결, 웹 브라우져에 따른 파라미터 처리,오라클 케릭터셋-2 (0) | 2015.05.10 |
자바 리플렉션 사용법 , Reflection (0) | 2015.05.10 |
스프링 다국어 처리. spring Locale setting. (0) | 2015.05.10 |
QueryDsl에서 uniqueResult, singleResult 차이점. (0) | 2015.05.07 |