IE8 は UTF-16 の XSLT をサポートしていない

大量の XML データを処理するために、ひとまず DTDXSLT を書いて、検証を行うことにした。

XML文字コードUTF-16 とするとデータ効率が良いんだけど、UTF-16 ってまだまだサポートが不十分なのね。

たまげたのが IE8 で XSLTUTF-16 だと、エラーになってしまう点。Firefox 3.5 も Google Chrome 4.0 も、Opera 10.0 も問題ないけど、IE8 だけエラーになる。IE はもうちょっとがんばったほうがいいんじゃないの?

追記(2010/01/04)

はてブコメントもらったので、調べてみた。

IE8 でエラーが出る原因は、XMLDTDUTF-16 の BOM あり、XSLTUTF-16 の BOM なしだったためだ。XSLT にも BOM をつけたら IE8 でもエラーが出なくなった。DTD も BOM をはずすとエラーになる。

以下のコードで再現できる。

<?xml version="1.0" encoding="UTF-16"?>
<?xml-stylesheet href="xsl.xsl" type="text/xsl"?>
<!DOCTYPE test SYSTEM "dtd.dtd">
<test>test</test>
<!ELEMENT test (#PCDATA) >
  • xsl.xsl
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-16" />

<xsl:template match="/">
  <xsl:apply-templates />
</xsl:template>

<xsl:template match="test">
  <html>
  <body>
  <xsl:apply-templates />
  </body>
  </html>
</xsl:template>

</xsl:stylesheet>