gpt4 book ai didi

java - Spring 和 XSLT,字符编码

转载 作者:行者123 更新时间:2023-11-30 11:55:32 24 4
gpt4 key购买 nike

我对 HTML View 的正确字符集编码部分有疑问。 JSP 文件中的 XSL 文件生成 .html。来自数据库的值编码正确,但表的静态 header 包含错误字符。

例如,有标题命名为:伊米伊、纳兹维斯科、哈斯沃、普雷奇、但它产生: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Ä&#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>

没有内容类型 header !

我应该更改我的 Tiles 模板吗?

顺便说一句,@Alejandro,@Jim Garrison - 感谢提示。

最佳答案

似乎 JSTL 没有正确读取或输出 UTF-8 数据。我发现了一些关于 UTF-8 数据和 JSTL 转换问题的报告,但解决方案并不多。

我确实找到了 this page describing a similar problem with JSTL and UTF-8 support .解决方案是切换变压器并使用 Saxon。

关于java - Spring 和 XSLT,字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com