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 |