IE8 は UTF-16 の XSLT をサポートしていない
大量の XML データを処理するために、ひとまず DTD と XSLT を書いて、検証を行うことにした。
XML の文字コードは UTF-16 とするとデータ効率が良いんだけど、UTF-16 ってまだまだサポートが不十分なのね。
たまげたのが IE8 で XSLT が UTF-16 だと、エラーになってしまう点。Firefox 3.5 も Google Chrome 4.0 も、Opera 10.0 も問題ないけど、IE8 だけエラーになる。IE はもうちょっとがんばったほうがいいんじゃないの?
追記(2010/01/04)
はてブコメントもらったので、調べてみた。
IE8 でエラーが出る原因は、XML と DTD は UTF-16 の BOM あり、XSLT は UTF-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>