jsp, servlet, tomcat, mysql 에서 인코딩 문제
인코딩 문제 때문에 여기 저기 자료를 찾아보았는데
머리가 나뻐서 그런지 명확하게 머리속에 안남는군요 ㅡㅡ;
어제 하루종일 인코딩 관련 자료를 찾아 봤는데 먼가가 부족한거 같아서 이렇게 질문 드립니다.
저의 문제는 파라메터로 날아온 값을 DB에 저장하려고 하는데 날아온 파라메터 값의 한글 인코딩이 깨어진다는 것입니다.
1)
jsp 파일에서 아래와 같이 선언을 하였습니다.
<%@ page language="java" contentType="text/html; charset=euc-kr" pageEncoding="EUC-KR"%>
제 생각에는 그러면 서블릿으로 가는 파라미터들은 euc-kr로 인코딩되어서 날아 갈거라고 생각했는데 서블릿에서 request.getCharacterEncoding()으로 찍어보니까 null이라고 나오더군요 null이란 말은 8859_1로 날아왔다는 이야긴거 같은데 그렇다면 jsp에서 encoding타입을 설정해 주는 이유가 무엇입니까?
2)
어떤 자료에 보니까 서블릿에서 request.setCharacterEncoding("euc-kr") 이라고 하면 인코딩이 바뀐다고 되어있던데 그래서 제 생각으로는 8859_1(한글)--> euc-kr(한글)로 바뀌어서 서블릿에서는 한글이 제대로 나올거라고 생각을 했는데 아니더군요 request.getCharacterEncoding()을 찍어보니까 euc-kr이라고 나오긴 나오던데 날아온 한글은 그대로 깨어져있더군요.
그렇다면 왜 request.setCharacterEncoding("euc-kr") 을 사용하고 어떤 때 사용하여야 하는지요?
3)
자료를 찾아보니까 클라이언트 브라우저에서 서블릿으로 날아오는 인코딩은 8859_1이기 때문에 한글을 표현하기 위해서는 무조건
public static String toKor(String str) throws Exception {
return new String(str.getBytes("8859_1"), "KSC5601");
}
와 같은 변환과정을 거쳐야 한다고 되어있더군요 이런 노가다 작업을 계속해야 하는겁니까? ㅡㅡ; 다른 방법은 없는건지요?
4)
kenu님의 인코딩 자료에서
<%@ page contentType="text/html;charset=MS949" %>
<head> <META HTTP-EQUIV="Content-type" CONTENT="text/html;charset=ksc5601"> 로 사용해야 한다고 되었던데 meta에서 ksc5601로 보낸다는게 setvlet에서 확인하는 인코딩이 ksc5601이라는 이야기 입니까? 또 parameter도 적용되는지? 초보 자바 개발자라서 모르는게 무쟈게 많고 궁금한것도 많습니다 ^^; 질문중에도 제가 잘못 알고있는 부분이 많을텐데 아는 부분에 한해서 저에게 가르침을 좀 주십쇼
우선 pageEncoding="EUC-KR"
우선 pageEncoding="EUC-KR" 은 출력된 HTML 페이지가 euc-kr 이라는 이야기가 아니라 jsp 소스 페이지가 euc-kr로 인코딩 되어있다는 뜻입니다.
츨력 인코딩 설정은 contentType="text/html; charset=euc-kr" 로 충분합니다.
request.setCharacterEncoding("euc-kr") 은 post 요청에 대해서만 작동합니다. get 요청으로 전달되는 파라메터들에 대해서는 표준적인 방법이 없습니다. 톰캣의 경우 설정 파일(server.xml) 에서 get 파라메터에 대한 인코딩을 정해줄 수 있습니다. 구체적인 설정 방법은 기억나지 않습니다.-_- 죄송.. 한 번 검색해보시기를....
댓글 달기