이전 글 에서 예상한 것처럼 인코딩 문제의 해결은 쉽지가 않았다.
SiteMesh의 기본 인코딩은 iso-8859-1 다.
다행이 SiteMesh 사이트에는 인코딩을 해결하는 방법을 설명하고 있다.
하지만, 알려준대로 해도 해결되지 않았다.
혹시나 해서 SiteMesh 적용을 피해 같은 코드를 테스트하자
브라우저에서 인코딩일 잘 표현되었다.
IE와 파이어폭스 모두
그럼... 원인은 SiteMesh 라고 짐작할 수 있다.
일단, 공식 문서에서의 내용이 도움이 되지 못하니까
코드를 뜯어봐야할지도 모른다. ㅡㅡ;
일단, 결과를 확인해보는 기초적인 기법을 통해서 알아낸 것은
sitemesh.xml 에서의 설정에 따라 브라우저가 인코딩을 설정한다는 점이다.
<page-parsers>
<parser default="true"
class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
<parser content-type="text/html"
class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
<parser content-type="text/html;charset=ISO-8859-1"
class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
</page-parsers>
즉 위와 같이 되어 있는 경우, 브라우저가 ISO-8859-1 로 페이지를 인식한 반면
<page-parsers>
<parser default="true"
class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
<parser content-type="text/html"
class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
<parser content-type="text/html;charset=UTF-8"
class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
</page-parsers>
이렇게 변경하자 UTF-8 로 인식했다. 문제는 그래도 한글이 제대로 출력되지 않는다는 점이다.
브라우저 인식 문제가 아니라, 한글 자체가 잘못 출력되어진다고 할 수 있겠다.
<page-parsers>
<parser default="true"
class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
<parser content-type="text/html;charset=UTF-8"
class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
</page-parsers>
이렇게 chsrset이 없는 것에 대한 설정이 지워버리자 IE는 변화가 없고
파이어폭스는 SiteMesh 태그 파싱 자체가 안되었는데
원인은 알 수 없다. ㅡㅡ;
흠... 아무래도 소스 코드를 바꾸는 래퍼를 만드는건 조잡하고
필터.. 그래.. 인코딩 필터를 하나 더 설치해봐야겠다. |