코드에 한글을 넣고 이를 출력하게 하면 브라우저에서 ??로 나오거나 아니면 이상한 문자가 나오면서 한글이 깨지게 된다.
한글이 깨지는 이유는 2가지 이다.
이클립스 자체 설정 인코딩이 한글을 해석할 수 없는 문자코드로 되어있는 경우다. 한글은 2byte씩 묶여서 클라이언트에게 전달되어야 하는데 1byte씩 전달되면 브라우저에서는 한글을 해석할 수 없게된다.
이 경우 한글이 '?'로 나온다.
서버에서는 UTF-8로 문자코드를 잘 설정해서 보냈지만 브라우저에서 받은 문잔코드를 UTF-8이 아닌 다른 문자코드로 해석을 하면 한글이 이상한 문자로 나온다. ex) 꽥뙓
이렇듯 한글이 깨지지 않게 하려면 2가지 설정을 해주어야 한다.
@WebServlet("/hihi")
public class MinJ extends HttpServlet{
@Override
protected void service(HttpServletRequest requst, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8"); // 응답해서 보내는 문자타입이 UTF-8
response.setContentType("text/html; charset=UTF-8"); // 브라우저에게 해석할 문자가 UTF-8임을 알려줌
// & 브라우저에게 이 문서는 text/html이라고 알려줌
PrintWriter out = response.getWriter();
out.println("안녕안녕 서블릿~!");
}
}
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
위 첫 번째 코드가 보내는 문자코드를 설정한 것이고
두 번째 코드가 실행되는 브라우저의 문자코드를 설정한 것이다.
(두 번쨰의 text/html은 실행되는 브라우저에 이 문서가 text/html이라고 알려주는 것이다.)
이제 한글이 깨지지 않을 것이다!