JSP & Servlet

2020 jsp(java server page) & servlet(ServerApplicationLet) 9.한글과 콘텐츠 형식 출력하기

Jungsoomin :) 2020. 6. 27. 02:47

 

한글이 깨지는 이유는 2가지이다.

1.서버에서 한글을 지원하지않는 문자코드로 인코딩한 경우 : 톰캣은 ISO-8859-1 을 기본 문자셋으로 사용한다 1byte 씩 전달하는데 한글은 1byte로 표현되지 않고 2byte로 표현된다는 것을 알고 있을 것이다. 톰캣의 기본 전송방식으로 인해 깨지게 되는 것이다.

2.서버에서 UTF-8로 인코딩해서 보냈지만 브라우저가 다른 코드로 잘못 해석한경우 : 2byte 씩 보내지만 브라우저가 다른 코드로 잘못 해석(EUC-KR)한 경우



그럼 어떻게 보낼 데이터를 명시할 수 있을까??

 

reponse.setCharacterEncoding("UTF-8"); 으로 명시하는 것이다. 이는 곧 서버에서 보낼 문자셋을 정의한다.

 

@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setCharacterEncoding("UTF-8");

		PrintWriter out = resp.getWriter();
		for (int i = 0; i < 100; i++) {
			out.println((i + 1) + " : 안녕 <br>");
		}
	}

 

이제는 글씨가 깨져나가기 시작했다.이제는 이상한 문자로 깨지기 시작했다. 어떻게 해결할까.

 

 




UTF-8로 보낼 것인데 UTF-8로 읽으세요! 

 

라고 명시해줘야하는 것이다.  즉 Reponse Header에 UTF-8로 명시한다고 보면 된다.


resp.setContentType("text/html; charset=UTF-8"); 을 사용하여 명시하게 된다.

UTF-8로 읽어요, 그리고 html 문서에요. 라고 정의 해준다.

 

@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html; charset=UTF-8");

		PrintWriter out = resp.getWriter();
		for (int i = 0; i < 100; i++) {
			out.println((i + 1) + " : 안녕 <br>");
		}
	}

 

 

정상적으로 출력 됨을 보게 된다.