인코딩, 디코딩을 통한 한글 깨짐 현상 처리 :: 소림사의 홍반장!

출처 : 과일가게 개발자 (http://fruitdev.tistory.com/64)



웹 개발을 하다보면 GET / POST 방식의 전송시 한글이 깨지는 경우가 종종 있다.

특히 이제 막 웹 개발을 시작하는 분들의 경우 한글깨짐이 발생하여 굉장히 당황스러워 하는데,
사실 웹 개발자라면 초보시절에 한번쯤은 다들 경험해 봤을것이다. 
처음 한번 경험하고 그 이후엔 그 경험을 토대로 더이상 실수하지 않는 그런것 이랄까?

오늘은 JSP / Servlet을 통한 웹 개발시 한글깨짐에 대해 처리하는 방법을 정리해 보았다.

참고로 JSP를 구동시키는 WAS는 톰캣을 이용하였고, 모든 웹페이지의 캐릭터셋은 UTF-8로 개발하였다.



1. POST 전송시 한글깨짐
JSP 페이지 상단에 request.setCharacterEncoding 을 명시한다.


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
 
<%@page import="java.util.*"%>
<%
 
    request.setCharacterEncoding("UTF-8");
%>
 



2. GET 전송시 한글깨짐
Tomcat의 server.xml에 URIEncoding 옵션을 추가해 준다. 

아파치를 연동하여 AJP를 사용할 경우 AJP connector에도 해당 옵션을 추가해 준다.


  <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" URIEncoding="UTF-8" />





위와같이 하면 한글깨짐이 어느정도 해결이 된다.


나 같은 경우 GET 방식으로 파라미터를 넘겨 사용할때는 가급적이면 해당 문자열을 인코딩하여 전달한다.
특히 한글이나 특수문자 공백이 들어갈 경우에는 무조건 문자열을 인코딩하여 사용하는데 이는 잘못된 파라미터의 전달처럼 원치않은 문자열이 들어오는것을 피하기 위해서이다.
또한 최신 브라우저는 상관없지만 IE 6, 7과 같은 구형 브라우저에서 문제가 생기는 경우가 있었다.

그래서 습관적으로 get 방식으로 전송되는 문자열에 대해서 인코딩하여 전송한다.

전송하여야 할 문자열은 URLEncoder를 이용하여 인코딩하면 되고 받는쪽에서는 URLDecoder를 이용하여 디코딩하여 사용하면 된다. (POST 전송시엔 할 필요없다)


보내는쪽


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@page import="java.net.URLEncoder"%>
 
<%
     
    String text = "홍길동" ;
 
    // 전송 문자 UTF-8 인코딩
    string encText = URLEncoder.encode(text, "UTF-8") ;
%>





받는쪽


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@page import="java.net.URLDecoder"%>
 
<%
     
    // Get 전송 파라미터
    String rText = request.getParameter("text") ;
 
    // 문자 디코딩
    string text = URLDecoder.decode(text, "UTF-8") ;
%> %>%
 







참고로 자바스크립트에서 문자열을 인코딩하여 전송할때는 아래와 같이 encodeURIComponent 함수를 

사용하면 URLEncoder와 동일하게 구현할 수 있다.

escape(encodeURIComponent("홍길동")) 




다른 카테고리의 글 목록

Dev. 웹/HTML.JSP 카테고리의 포스트를 톺아봅니다