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 に答える