そんなXML processorは窓から投げ捨ててしまえ [XML]

| コメント(4) | トラックバック(0)

ネタ元-> そんなことを気にしたいんじゃないのに... のコメント欄

> XMLってUTF-8がでふぉであとオプションでしょ?
UTF-8 と UTF-16 が必須であとはオプションです。
> UTF-8ってBOMなしがでふぉでしょ?
XML に限ればそう言えなくも無いですが、UTF-8 一般に対してはそんなことはないです。

まず1個目。「UTF-8 と UTF-16 が必須」はXML勧告1(§2.2)に

All XML processors MUST accept the UTF-8 and UTF-16 encodings of Unicode 3.1

ってあるんで、問題ないでしょ。

で、「XMLに限ればUTF-8ってBOMなしがデフォ?」が気になったのでちょっと調べてみた。

まず、UTF-8とBOMの関係。Wikipediaに書いてある意見によると、

  • UTF-8 にBOMがつく場合もある
  • BOM無しUTF-8をUTF-8Nとか読んでる人もいるけどUnicodeの公式な裏付けはないそうだ。
  • その他諸々(ぉぃ

XML勧告に戻ってみると(§4.3.3)

Entities encoded in UTF-16 MUST and entities encoded in UTF-8 MAY begin with the Byte Order Mark described by Annex H of [ISO/IEC 10646:2000], section 2.4 of [Unicode], and section 2.7 of [Unicode3] (the ZERO WIDTH NO-BREAK SPACE character, #xFEFF). This is an encoding signature, not part of either the markup or the character data of the XML document. XML processors MUST be able to use this character to differentiate between UTF-8 and UTF-16 encoded documents.

やっぱり同じことが書いてある。「BOMはencoding signatureであってマークアップやXMLドキュメントの一部ではない。XML processorはこの文字(ZERO WIDTH NO-BREAK SPACE)を区別できなければならない」だそーですので、やっぱり BOM付きUTF-8を解せないアプリケーションはXML processorを名乗る資格はないですな。

ちなみに、BOM無しUTF-16は有り得ない (UTF-16LE/UTF-16BEならBOM無いけどこいつらは"UTF-16"ではないよね)のでアプリケーションを試すにしても4通りじゃなくて3通りだと思うですよ。BOM無しUTF-16は BOMは使わなくてもいいが、そのときは、ビッグエンディアンにするように決められている。でした。スミマセン。やっぱ4通りみたいです。

1 参照してるのは version 1.0 の fourth edition です。

トラックバック(0)

トラックバックURL: http://floralcompany.jp/mt/mt-tb.cgi/140

コメント(4)

トラバありがとうございます。

> BOM付きUTF-8をUTF-8Nとか読んでる人もいるけど

UTF-8NはBOMなしでは?

> やっぱり同じことが書いてある。

んー…これは、external parsed entity、訳すと「外部解析対象実体」とかいうやつについての記述ですな。
これは必ずしも XML とは限らないので、今回のケースとはちょっと違うかもです。

XML 本体については、付録 F に、BOM はあってもなくてもいいようなことが書いてあります。
また、UTF-8(RFC 3629)は、プロトコルが BOM 以外の文字コード識別機構を提供するなら、プロトコルは BOM の使用を禁ずるべきであるとしています。
XML は BOM の使用を禁じていませんが、付録 F は、この文字コード識別機構と解釈できないことも無いため、UTF-8 XML に BOM をつけることは望ましいことではないかもしれません。
とはいえ、それは「自粛した方がいい」程度のものであって、読めないパーサはやはり論外でしょうw

しかし、(ISO 10646は見ていませんが)XML と RFC の言っていることが違ったり、BOM は「本来はゼロ幅空白だが BOM としても使える」なんて曖昧なものになっていたりして困りますな。
このへん、改版できっちりしてもらえないものでしょうかね。

追記

> BOM無しUTF-16は有り得ない

Wikipedia には

> BOMは使わなくてもいいが、そのときは、ビッグエンディアンにするように決められている。

とあるので、有り得るようですよ。
XML 1.0 の初版には、BOM なしはエラーと書いてあったようですが、2nd で訂正されていますし。

コメントする

AUTHOR

  • turugina (虎王 剱奈)
  • E-mail: turugina {at} floralcompany.jp
  • pixiv
  • ニジエ

2014年5月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.2.10

- 警 告 -

本サイトにはいわゆる「18禁画像」(イラスト)へのリンクが存在します。 未成年の方や、その手の画像に不快感を覚える方は、 該当記事(「えちぃの」及び「ちょっとえちぃの」カテゴリ) をご覧にならないようお願いいたします。

上記を理解した上で非表示のブログパーツを表示する
あわせて読みたいブログパーツ
ついった
drawr/pixiv/twitpic