2014년 7월 28일

톰켓환경에서 Encoding 문제

Tomcat 환경에서 동작하는 웹 응용프로그램의 Encoding 문제는 대부분 GET 방식으로 데이터를 전송할때 발생된다.

Tomcat 관련 문서에 따르면 character encoding 이 지정되지 않는 경우 Servlet 스팩에 따라 ISO-8859-1 이 사용된다고 한다. HTTP 메시지(request/response)의 body 부분에 대한 character encoding 는 메시지 헤더의 Content-Type 필드에 기술된다.

참고 : Character Encoding Issues  HTTP 1.1 Specification, Section 3.7.1

GET 에서 인코딩
GET 파라메터들은 표준에 따라 US-ASCII 로 정의된다. 즉 모든 문자들은 US-ASCII 형태로 인코딩되어야 한다는 의미이다. 대부분의 브라우져들이 디폴트 URI 인코딩으로 UTF-8 사용하고 있고, HTML 4.0 역시 UTF-8 을 권고하고 있기 때문에 이부분은 향휴 US-ASCII 에서 UTF-8 로 변경되지 않을 까 기대한다.  

Tomcat 은 GET 파라메터들을 포함하여 전체 URL에 대한 인코딩 문자로 ISO-8859-1(US-ASCII 와 호환됨) 을 사용하고 있다. 인코딩을 변경하고자 하는 경우를 위하여 아래와 같은 방법을 지원한다.


  • server.xml 파일에서 <Connector> 의 URIEncoding 속성 값을 지정한다. (예, URIEncoding="UTF-8")
  • server.xml 파일에서 <Connector> 의 useBodyEncodingForURI 속성 값을 true 로 설정한다. 이는 Connector 객체가 request body 의 인코딩을 사용하여 GET 파라메터들을 인코딩하게 한다.

GET 에서 인코딩 설정 주의 사항
URIEncoding 과 useBodyEncodingForURI 속성을 동시에 사용하는 경우에 Encoding 이 원하는 결과로 처리되지 않는 경우가 있다. 

테스트 환경 
  • Apache Tomcat 7.0.32 
  • Encoding : UTF-8

댓글 없음:

댓글 쓰기