pageEncoding 속성
JSP page 디렉티브의 속성 중 pageEncoding 속성이 있습니다. 
이 속성은 JSP 소스 파일이 저장될 시 사용될 인코딩을 지정하며 JSP 컨테이너는 JSP 를 Servlet으로 파싱하는 과정에서 분석을 하게 되는데, 이 때 어떤 인코딩을 통해 작성했는지 검사하고 해당 캐릭터 셋을 이용하여 JSP 페이지의 소스를 읽어 들여 파싱합니다.
당연히 잘못된 pageEncoding 값이 사용되는 경우 JSP 페이지에서 사용되는 일부 문자열들이 깨질 수 있습니다.

JSP 스펙에는 컨테이너가 JSP 페이지를 읽어들이는 과정을 다음과 같이 설명하고 있습니다.
1. 파일이 BOM으로 시작하는 경우
- 파일의 BOM을 이용해서 인코딩을 판단하고, 해당 인코딩을 이용하여 JSP 페이지를 읽어 들입니다.
- 이후 page 디렉티브의 pageEncoding 속성을 검사하는데 만약 BOM의 인코딩과 pageEncoding 속성의 인코딩이 다른 경우 에러가 발생합니다.

2. 파일이 BOM으로 시작하지 않는 경우
- 먼저 파일을 읽어야 하기 때문에 기본 인코딩으로 파일을 처음부터 읽습니다.
- pageEncoding 속성을 검사하고 인코딩 속성 값이 있다면 해당 속성값의 캐릭터셋으로 파일을 읽습니다.
- pageEncoding 속성값이 없는 경우 contentType 속성을 검사하고 contentType 속성값의 캐릭터셋으로 파일을 읽습니다.
- 파일이 ASCII 문자로만 작성된 경우 pageEncoding, contentType 속성이 아닌 ISO-8859-1 캐릭터 셋으로만 파일을 읽습니다.


pageEncoding 속성이 없는 경우 contentType 속성값을 사용하므로 두 속성중 하나라도 인코딩 값을 제대로 설정해 주어야 합니다.
한글을 사용하는 경우 한글은 UTF-8, EUC-KR 등의 인코딩에서 모두 사용 가능하므로, 다음과 같이 JSP 소스는 EUC-KR로 작성 후 응답 결과는 UTF-8로 보내도록 설정할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="EUC-KR"%>
 
<html>
<head>
<title>Insert title here</title>
</head>
<body>
안녕 월드!
</body>
</html>
cs

 


BOM


주의할점
JSP 페이지를 작성할 때 page 디렉티브의 인코딩 설정 이외에도 이클립스 등의 IDE 기본 파일 저장 인코딩 설정 및 클라이언트인 브라우저의 인코딩 설정 또한 주의해야 합니다.

블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

댓글을 달아 주세요! 질문 환영합니다!