我正在创建一个简单的JSP应用程序来将XML数据转换为HTML。 我使用JSTL,我的XML数据以UTF-8编码。它有效,但丹麦人在浏览器中看起来很奇怪。
像这样:
直接在jsp中写的丹麦字符:ÆØÅæøå
用jstl转换相同的丹麦字符:
字符:Æ字符:Ã|
字符:Ã〜字符:ø
字符:Ã...字符:Ã¥
但是,如果我像这样手动更改xml定义:
<?xml version="1.0" encoding="ISO-8859-1" ?>
输出正确转换。
我应该以某种方式设置JSTL来处理UTF-8,还是我的文件实际上是错误的latin1编码?我不知道怎么检查这个...
这是我的测试xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<rows>
<row>
<name>character: Æ</name>
<surname>character: æ</surname>
</row>
<row>
<name>character: Ø</name>
<surname>character: ø</surname>
</row>
<row>
<name>character: Å</name>
<surname>character: å</surname>
</row>
</rows>
这是我的xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table border="0">
<xsl:for-each select="rows/row">
<tr>
<td>
<xsl:value-of select="name" />
</td>
<td>
<xsl:value-of select="surname" />
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
我的index.jsp:
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
Written directly in jsp: ÆØÅ æøå
<h3>xml transformed with jstl:</h3>
<c:import url="/Test.xsl" var="xsltdoc" />
<c:import url="/Test.xml" var="xmldoc" />
<x:transform xml="${xmldoc}" xslt="${xsltdoc}" />
</body>
</html>
我在JBOSS AP 4.2.3上使用JSTL库(实现版本:1.2)。
答案 0 :(得分:2)
好的,我检查了我的xml数据here的编码,它是正确的,它是UTF-8编码的。
显然,在index.jsp中,JSTL必须设置为使用UTF-8,这样
<c:import url="/Metadata1.xsl" var="xsltdoc" charEncoding="UTF-8" />
<c:import url="/Metadata1.xml" var="xmldoc" charEncoding="UTF-8" />
这解决了我的问题。