5

出力エンコーディングを utf-8 に設定すると、出力ファイルで iso-8859-1 文字が utf-8 に変換されないのはなぜですか?

iso-8859-1 エンコーディングの xml 入力ファイルがあり、エンコーディングが宣言されています。utf-8で出力したいです。私の理解では、xslt ファイルで出力エンコーディングを設定すると、文字変換が管理されます。

私の理解は間違っていますか?そうでない場合、次の単純なテスト ケースで utf-8 宣言された出力ファイルに iso-8859-1 文字が出力されるのはなぜですか?

私の入力ファイルは次のようになります。

<?xml version="1.0" encoding="ISO-8859-1"?>
<data>ö</data>

私の変換は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
    <xsl:output encoding="UTF-8" />
    <xsl:template match="/">
        <result>
            <xsl:value-of select="." />
        </result>
    </xsl:template>
</xsl:stylesheet>

コマンドラインから saxon9he を使用すると、結果は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<result>ö</result>

私の結果ファイルの ö は、無効な utf-8 文字である BabelPad によると 0xF6 です。ö は変形の影響を受けていないようです。

助けてくれてありがとう!

4

1 に答える 1

5

考えられる説明は 2 つあります (おそらく他にもあると思います)。

(a) シリアル化の最終段階、つまり文字をバイトに変換する段階は、XSLT プロセッサではなく、スタイルシートにアクセスできない他のソフトウェアによって行われます。これは、たとえば、出力を OutputStream ではなくライターに送信する Java アプリケーションで変換を実行した場合に発生します。ライターは、プラットフォームのデフォルト エンコーディング (おそらく iso-8859-1) を使用して文字をバイトに変換します。

(b) ディスプレイに表示されているオクテットは、ディスクに保存されているオクテットではなく、それらの一部の変換です。これは、ファイルをエディターにロードしてから 16 進表示を要求したときに発生する可能性があります。場合によっては、ディスクに保存されているものではなく、ドキュメントのエディターのメモリ内表現の 16 進表示が得られます。

于 2013-02-08T08:05:12.137 に答える