encoding - JSTL 可以转换以 UTF-8 编码的 XML 吗?

标签 encoding

我正在制作一个简单的 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)。

最佳答案

好的,我检查了 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" />

这解决了我的问题。

关于encoding - JSTL 可以转换以 UTF-8 编码的 XML 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12051776/

相关文章:

node.js - 如何在 Node.js 中获取 UTF-8?

encoding - 在 ABAP 中的给定索引处获取 UTF-16 代码单元

iphone - 来自编码未知的文本文件的 NSString

java - 如何计算字符串中字符组成的回文数?

c++ - 使用 libcurl 下载 UTF-8 文件(ANSI 工作正常)

c# - 变长整数编​​码

php - 使用 PHP 将 UCS-2 文件转换为 UTF-8

Javascript:将 Uint8Array 中的二进制数据转换为字符串损坏文件

ruby - 在 ruby​​ 2.5.0 中读取带有 BOM 的 UTF-8

encoding - 如何编码/解码空字符串