2011-02-09 5 views
2

HTML 뷰의 문자셋 인코딩에 문제가 있습니다. JSP 파일의 XSL 파일은 .html을 생성합니다. 데이터베이스의 값은 올바르게 인코딩되지만 테이블의 정적 헤더에는 잘못된 문자가 들어 있습니다.스프링 및 XSLT, 문자 인코딩

예를 들어,라는 이름의 헤더가 있습니다 : Imię, Nazwisko, Hasło, PLEC, 하지만 생성 이미 아 ™, Nazwisko, HasÅ,o, PÅ,eÄ ‡

내 forHomeHtml.xml 템플릿 :

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" 
version="1.0"> 

<xsl:output method="xhtml" encoding="UTF-8" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" /> 

<xsl:template match="/"> 
    <xsl:apply-templates /> 
</xsl:template> 

<xsl:template match="/employees"> 
    <table> 
     <tr> 
      <th></th> 
      <th>Imię</th> 
      <th>Nazwisko</th> 
      <th>Hasło</th> 
      <th>Płeć</th> 
     </tr> 
     <xsl:for-each select="./employee"> 
      <tr> 
       <td></td> 
       <td> 
        <xsl:value-of select="name/text()" /> 
       </td> 
       <td> 
        <xsl:value-of select="surname/text()" /> 
       </td> 
       <td> 
        <xsl:value-of select="password/text()" /> 
       </td> 
       <td> 
        <xsl:value-of select="gender/text()" /> 
       </td> 
      </tr> 
     </xsl:for-each> 
    </table> 
</xsl:template> 

JSP 사이트 :

<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

<c:import var="inputDocument" 
url="http://localhost:8080/xyz/home.xml" /> 
<c:import var="stylesheet" url="/WEB-INF/xsl/forHomeHtml.xsl" /> 

<x:transform xml="${inputDocument}" xslt="${stylesheet}"> 
</x:transform> 
,691

<?xml version="1.0" encoding="UTF-8" ?> 
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<html> 
<head> 
<title><tiles:getAsString name="title" /></title> 
... 

가 나는 파일 (JSP, XSL의

<filter> 
    <filter-name>encodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
    <param-name>encoding</param-name> 
    <param-value>UTF-8</param-value> 
    </init-param> 
    <init-param> 
    <param-name>forceEncoding</param-name> 
    <param-value>true</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>encodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

문자 인코딩 web.xml에 인코딩 필터를 가지고 추가합니다 : 인코딩이 기본 템플릿에 선언되도록 363,210

나는 타일을 사용하여 , XML 등)은 UTF-8로 설정됩니다. 브라우저의 문자 인코딩이 UTF-8로 설정됩니다.

아무도 그 문제의 이유를 알고 있습니까?


업데이트 : 그것은 이상한,하지만 사이트의 소스 코드 다음이 포함

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd"> 
<html> 
<head> 
<title>Strona główna</title> 
<style type="text/css"> 
.table-list { 
border: 1px solid black; 
border-collapse: collapse; 
} 
... 
</style> 
</head> 
<body> 
<table width="100%" border="0"> 
<tr style="background-color: #EEEEEE;"> 
<td><?xml version="1.0" encoding="UTF-8" ?> 
<ul class="navigation_menu"> 
<li><a href="./home.htm">Strona główna</a></li> 
<li><a href="./rejestracja.htm">Rejestracja</a></li> 
<li><a href="./historia-wypozyczen-samochodu.htm">Historia samochodu</a></li> 
<li><a href="./dodawanie-zamowienia.htm">Dodawanie zamówienia</a></li> 
</ul> 

<div style="text-align: center;"> 
Liczba obsłużonych dzisiaj zamówień: 
0 
</div></td></tr> 
<tr> 
<td valign="top" align="left"> 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE table PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- transitional.dtd"> 
<table xmlns="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml"> 
<tr> 
<th /> 
<th>ImiÄ&#153;</th> 
<th>Nazwisko</th> 
<th>HasÅ&#130;o</th> 
<th>PÅ&#130;eÄ&#135;</th> 
</tr> 
<tr> 
<td /> 
<td>Zenon</td> 
<td>Kowalski</td> 
<td>zHasło</td> 
<td>Mężczyzna</td> 
</tr> 
<tr> 
<td /></tr> 
.... 
<tr style="background-color: #EEEEEE;"> 
<td><?xml version="1.0" encoding="UTF-8" ?> 
<div style="text-align: center;"></div></td></tr> 
</table> 
</body> 
</html> 

어떤 내용 유형 헤더가 없습니다!

타일 템플릿을 변경해야합니까?

Btw, @Alejandro, @Jim Garrison - 팁 주셔서 감사합니다.

+1

UTF-8은 ISO-8859-1 (또는 다른 다른 1 바이트 문자 세트) 인 것처럼 해석됩니다. 브라우저가 데이터 스트림을 UTF-8로 해석하도록 설정되어 있고 데이터 스트림 자체가 UTF-8로 선언되어 있음을 어떻게 알고 있습니까? 올바른 UTF-8 문자와 잘못된 UTF-8 문자를 모두 보여주는 스크린 샷을 게시 할 수 있습니까? –

+0

브라우저로가는 트래픽을 캡처하고 스트림이 실제로 UTF-8로 태그 지정되었는지 확인하기 위해 헤더를 검사하십시오. 우리는 그것이 UTF-8이라는 것을 알고 있지만 헤더에 의해 UTF-8로 식별되는지는 알 수 없습니다. –

+0

@bontade : @Jim Garrison에 동의합니다. 브라우저 문제처럼 보입니다. 적절한 인코딩으로'meta' 엘리먼트를 가진 적절한 (X) HTML 문서를 출력해야합니다. –

답변

1

JSTL이 UTF-8 데이터를 올바르게 읽거나 출력하지 않는 것처럼 보입니다. UTF-8 데이터 및 JSTL 변환과 관련된 여러 가지 보고서를 찾았지만 많은 솔루션이 아닙니다.

나는 this page describing a similar problem with JSTL and UTF-8 support을 찾았습니다. 해결책은 변압기를 바꾸고 Saxon을 사용하는 것이 었습니다.