본문 바로가기
프론트기술

JSP 인코딩 정리

by RevFactory 2012. 10. 27.

JSP에서의 인코딩관련문제는 아래과정에서 발생한다.
 
 
 
1. JSP파일을 하드디스크에 저장하기 위하여 인코딩하는 단계
 
(한글윈도우상의 대부분편집프로그램의 기본시스템 인코딩=MS949)
 
2. JSP파일을 java소스파일로 변환하고 컴파일하면서 디코딩하는 단계
 
(톰캣서버의 기본 문자셋 8859_1)
 
3. 서버에서 클라이언트로 문자열을 보내기위해 인코딩하는 단계
 
(톰캣서버의 기본 문자셋 8859_1)
 
4. 클라이언트의 브라우저가 받아들이면서 디코딩하는 단계.
 
(한글윈도에서 대부분브라우저의 세팅:MS949)
 
5. 클라이언트의 브라우저에서 서버로 정보를  보내기위해 인코딩하는 단계
 
(한글윈도에서 대부분브라우저의 세팅:MS949)
 
6. 서버에서 정보를 받아 문자열로 디코딩하는 단계
 
(톰캣서버의 기본 문자셋 8859_1)
 
 
 
 
 
 
 
 <%@page pageEncoding="ms949" contentType="text/html;charset=utf-8" %>
 
 
contentType="text/html;charset=utf-8"
2. 3. 4. 5.에 영향을 미친다.
pageEncoding="ms949"
2. 3. 에 영향을 미친다. 단 3.의경우는 contentType이 우선 적용된다.
 
 
 
 
 
 
 
==========================================================================================
 
<%@page pageEncoding="ms949" contentType="text/html;charset=utf-8" %>
<%
 String s1="가";
 String s2="뷁";
 System.out.println(s1);
 System.out.println(s2);
 out.print(s1);
 %><br /><%
 out.print(s2);
%>
 
 
 
===========================================================================================
 
 
 
<%@page pageEncoding="euc-kr" contentType="text/html;charset=utf-8" %>
<%
 String s1="가";
 String s2="뷁"; //euc-kr문자셋에는 존재하지않는문자.
 System.out.println(s1);
 System.out.println(s2);//글자가 깨져 출력되게 된다.
 out.print(s1);
 %><br /><%
 out.print(s2);
%>
 
 
 
===========================================================================================
 
 
 
<%
 response.setContentType("text/html;charset=utf-8");
 
   //3. 4. 5. 에만 영향을 미친다.
 
 String s1="가";
 String s2="뷁";
 s1=new String(s1.getBytes("8859_1"),"ms949");
 
   //8859-1로 잘못디코딩된 문자열을 ms949로 다시 디코딩한다.
 s2=new String(s2.getBytes("8859_1"),"ms949");
 System.out.println(s1);
 System.out.println(s2);
 out.print(s1);
 %><br /><%
 out.print(s2);
%>
 
 
 
===========================================================================================<%
 String s1="가";
 String s2="뷁";
 s1=new String(s1.getBytes("8859_1"),"ms949");
 s2=new String(s2.getBytes("8859_1"),"ms949");
 
   //8859-1로 잘못디코딩된 문자열을 ms949로 다시 디코딩한다.
 

 System.out.println(s1);
 System.out.println(s2);
 

 s1=new String(s1.getBytes("utf-8"),"8859_1");
 s2=new String(s2.getBytes("utf-8"),"8859_1");
 
  //UTF-8로 인코딩된 바이트를 전송하기위해,UTF-8로 인코딩한 후  8859_1로 디코딩하여
 
  //톰캣서버의 기본설정8859_1로 다시 인코딩하여 보낼때

  //UTF-8로 인코딩된 바이트가 보내지도록한다.
 
  //단 헤더에 인코딩정보가 없으므로 브라우저사용자가 수동으로 인코딩을 변경해주어야한다.
 out.print(s1);
 %><br /><%
 out.print(s2);
%>
 
===========================================================================================
 
 

 

 

 

'프론트기술' 카테고리의 다른 글

2020년도 Javascript 현황 조사  (0) 2021.01.23
OWASP Top10 2010  (0) 2010.02.22
한국형 웹 컨텐츠 접근성  (0) 2010.02.17