У меня проблема с правильной кодировкой части представления HTML. Файл XSL в файлах JSP генерирует .html.
Значения из базы данных закодированы правильно, но статические заголовки таблицы содержат неправильные символы.
Например, есть заголовки с именем:
Imię, Nazwisko, Hasło, Płeć,
но он генерирует:
Imi ™, 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>
Я использую Tiles, поэтому кодировка объявлена в основном шаблоне:
<?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>
...
Добавлю, что у меня есть фильтр кодировки в web.xml
<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>
Кодировка символов файлов (JSP, XSL, 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>
Нет заголовка с типом контента!
Должен ли я изменить свой шаблон плиток?
Кстати, @Alejandro, @Jim Garrison - спасибо за советы.