1

我有以下 XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<example>
    <contactInfo>
        <id>12319221</id>
        <name>Jerry P</name>
        <market>
            <name>Test</name>
            <phone>800.555.1010</phone>
        </market>
        <agent>
            <name>Test User</name>
            <email>testuser@email.com</email>
        </agent>
        <summary>&amp;#8220;Jerry just gets it!&amp;#8221;</summary>
    </contactInfo>
</example>

保存此 xml 文档时,我将特殊字符编码为 html 实体,因此智能引号如何编码为 “ 和 ”。

我通过 Java/Xalan 使用 XSL 将 xml 文档转换为 html:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="wsHost"></xsl:param>
<xsl:param name="serverId"></xsl:param>

<xsl:template match="/showcase">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <title>Example</title>
        </head>
        <body>
            <div id="profile">
                <xsl:apply-templates/>
            </div>
        </body>
    </html>
</xsl:template>

<!-- Contact Info section -->
<xsl:template match="/example/contactInfo">
    <span class="sectionTitle">Contact Info:</span>
    <div id="contactInfo">
        <xsl:if test="name">
            <strong>Candidate Name:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="name" /><br />
        </xsl:if>

        <xsl:if test="id">
            <strong>Candidate ID:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="id" /><br />
        </xsl:if>

        <xsl:if test="market">
            <xsl:if test="market/name">
                <strong>Market Name:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="market/name" /><br />
            </xsl:if>

            <xsl:if test="market/phone">
                <strong>Market Phone:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="market/phone" /><br />
            </xsl:if>
        </xsl:if>

        <xsl:if test="agent">
            <xsl:if test="agent/name">
                <strong>Agent Name:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="agent/name" /><br />
            </xsl:if>

            <xsl:if test="agent/email">
                <strong>Agent Email:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="agent/email" /><br />
            </xsl:if>
        </xsl:if>

        <xsl:if test="summary">
                <strong>Summary:</strong>&#160;<xsl:value-of disable-output-escaping="yes" select="summary" /><br />
        </xsl:if>
    </div>
    <hr size="1" noshade="noshade" class="rule" />
</xsl:template>
</xsl:stylesheet>

然后将转换产生的 html 写入浏览器。这是我注意到字符编码问题的地方。(nbsp 数值) 显示为黑色菱形问号 (firefox) 或方框字符 (ie),之前编码的实体 (“/”) 也是如此。

此外,也许最大的暗示是,当在 linux 平台上转换这个 xml 文件(然后将 html 写入 firefox)时,一切都会正确显示。只有在从 Windows 完成转换时才会出现字符编码问题(在 firefox 和 ie 中)。

我是否对实体进行了错误编码,或者可能没有在某处指定字符集?

4

2 回答 2

3

你说你正在使用 Java/Xalan。您是在提供输出流还是流写入器?如果是这样,您需要在该点显式设置编码:

... new OutputStreamWriter(stream,"UTF-8");

仅包含 UTF8 标头实际上不会导致输出文件进行 UTF8 编码。

于 2009-12-10T17:52:45.203 回答
0

好吧,您还没有在 HTML 文档中设置编码。不知道这是否是问题,但这将是我第一次尝试解决。

尝试添加:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

到你的头上。

于 2009-12-10T15:14:40.143 回答