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Ä™</th>
<th>Nazwisko</th>
<th>Hasło</th>
<th>Płeć</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 - 팁 주셔서 감사합니다.
UTF-8은 ISO-8859-1 (또는 다른 다른 1 바이트 문자 세트) 인 것처럼 해석됩니다. 브라우저가 데이터 스트림을 UTF-8로 해석하도록 설정되어 있고 데이터 스트림 자체가 UTF-8로 선언되어 있음을 어떻게 알고 있습니까? 올바른 UTF-8 문자와 잘못된 UTF-8 문자를 모두 보여주는 스크린 샷을 게시 할 수 있습니까? –
브라우저로가는 트래픽을 캡처하고 스트림이 실제로 UTF-8로 태그 지정되었는지 확인하기 위해 헤더를 검사하십시오. 우리는 그것이 UTF-8이라는 것을 알고 있지만 헤더에 의해 UTF-8로 식별되는지는 알 수 없습니다. –
@bontade : @Jim Garrison에 동의합니다. 브라우저 문제처럼 보입니다. 적절한 인코딩으로'meta' 엘리먼트를 가진 적절한 (X) HTML 문서를 출력해야합니다. –