(JSP) 쿠키 처리시 한글 인코딩 및 디코딩 처리하기 JSP_Java

쿠키 부분을 코딩하다가 이상한 에러를 만났다.
구문상 에러가 없는것 같은데, 자꾸 이상한 에러 메세지가 나온다.

java.lang.IllegalArgumentException: Control character in cookie value or attribute.

번역기에 돌려봤다.

쿠기 값이나 속성에 제어 문자가 들어갔다는 것이다.
물론, 제어 문자를 넣지 않았다.
원인은, 쿠키에 한글을 넣으려 한것이다.
JSP 에서는 쿠키에 한글을 직접 넣을 수 없다고 한다.
그래서, 인코딩을 해서 넣어주고, 불러올때도 디코딩을 해서 보여줘야만 한다.

역시, 자바계열은 한글 문제가 아주 골치 아프다.

아무튼, 쿠키 뿐만 아니라, 이와 비슷한 상황에 놓일때 쉽게 사용하도록 한글을 인코딩 하고 디코딩 하는 함수를 만들어 보았다.

--------------------------------------------------------------
<%@ page contentType="text/html;charset=euc-kr" %>
<%@page import="java.net.URLEncoder"%>
<%@page import="java.net.URLDecoder"%>
<%!
//java.lang.IllegalArgumentException: Control character in cookie value or attribute. (쿠키에 한글 입력할 경우 에러)
public static String euckr_encode(String str){
  String rslt = "";
  if(str!=null){
try {
      rslt = URLEncoder.encode(str,"euc-kr");
}catch(Exception e){ 
//return "";
}
  }
  return rslt;
}
%>
<%!
//쿠키에 한글은 인코딩 되어 들어가므로, 디코딩 해서 보여줌.
public static String euckr_decode(String str){
  String rslt = "";
  if(str!=null){
try {
 rslt = URLDecoder.decode(str,"euc-kr");
}catch(Exception e){
//return "";
}
  }
  return rslt;
}
%>
--------------------------------------------------------------

페이지 상단에
<%@page import="java.net.URLEncoder"%>
<%@page import="java.net.URLDecoder"%>
를 불러와서 사용한다.

변환 charset 는 euc-kr 로 했다.
함수에 try {}catch(Exception e){} 구문을 반드시 넣어줘야만 한다.
그렇지 않으면 주기적으로 에러가 발생한다.
그리고, Encoder 와 Decoder 는 반드시 null 값을 체크해줘야 한다고 한다.

다음과 같은 방법으로 호출해서 사용할 수 있다.

String str = "가나다라";
str = euckr_encode(str);
out.println(str);
str = euckr_decode(str);
out.println(str);

쿠키를 저장하기 전에 저장할 변수값을 인코딩 하도록 함수를 호출하고,
쿠키를 불러온 후 값을 비교하거나 화면에 뿌려주기 전에 디코딩 하도록 함수를 호출해서 사용하면 된다.


덧글

  • 손님 2013/07/22 13:21 # 삭제 답글

    소스 복사해가도 되죠.. 출처 남기겠습니다
    감사합니다 ^^
  • fendee 2013/07/22 14:35 #

    네, 감사합니다.
  • 2019/11/13 16:55 # 삭제 답글

    <%@page import="java.net.URLEncoder"%>
    <%@page import="java.net.URLDecoder"%>

    지정했는데요
    knowMain.do:83 Uncaught ReferenceError: URLDecoder is not defined
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.


통계 위젯 (화이트)

143617
4671
11047538

google_myblogSearch_side

▷검색어

Flag Counter style2