文字エンコーディングについて、text/htmlの事情とXMLの事情

text/htmlのXHTML(1.0)文書のデフォルトの文字エンコーディングは - cnrdの日記より。

XML宣言とDOCTYPE宣言 - vantguarde - web:gをきっかけにXHTML Media Types - Second Editionを見て、XHTML Media Types(FE, SE)のtext/htmlの項とXHTML 1.0 SEやXHTML Media Types FEのHTML互換性ガイドラインはデフォルトの文字エンコーディングの点で矛盾があるのでは、と思いました。

上記を拝見して自分も

を読んでみたのですが、この2つの記述は矛盾というよりは、現時点における事実をそのまま述べているだけと思いました。

text/htmlについては、(XHTML Media Types SEでも言及されているように、)

といった異なる内容の規定があったりするので、「デフォルトのcharsetをあてにすると面倒なことになるから、charsetは明示しましょう」ということで注意をうながしているものと思います。

また、互換性ガイドラインの記述については、この箇所はもともとXML宣言の省略に関して述べているわけで、XML宣言を省略するとなるとエンコーディング宣言も書けないわけですから、その条件として、XML文書のデフォルト文字エンコーディング(UTF-8またはUTF-16)にも言及せざるを得ないところだと思います。

「デフォルトの文字エンコーディング」という観点で見ると一見矛盾のように見えますが、「text/htmlというメディア型」と「XML文書の仕様」という2つの事情があり、それらはXHTML Media Typesが書かれる以前に既に決められたことであったため、それをありのままに述べた……ということだと思います。

以上のような考えで、下記のブックマークコメントを記していました。

text/htmlではデフォルトcharsetを仮定すべきでない(RFC 2854)、という話と、XML文書ではUTF-8/UTF-16がデフォルト(XML仕様)、という話だと思う。

* * *

そうしたところ、ブックマークコメントへの言及として、以下の問いかけを元記事の追記にて頂きましたので、再度考えてみました。

それについては異論ありませんが、ではHTML互換性ガイドラインが仕様(XHTML 1.0 SE, XHTML Media Types SE (Editor's Draft, 2008-04-23))の言うように文書をHTML UAでもレンダリングしたい文書作成者のための設計ガイドラインだとして、何故HTML(text/html)には適用されないルールを何の注釈もなしに記述しているのでしょうか。

念のためcnrdさんの疑問点を確認しておくと、「互換性ガイドラインはHTMLとの互換を考慮するものなのに、なぜHTML(text/html)には適用されない『XML文書ではUTF-8, UTF-16がデフォルトの文字コード』という話を持ち出すのか?」ということであろうと解釈しています。以下その前提で述べます。

確かにcrndさんの引用箇所(Remember, however, that ...)に注目すると「UTF-8, UTF-16で書ける」という話にとれなくもないですが、そのもう少し前からの文章の流れを読むと、そもそもこの箇所は「XML処理命令・XML宣言を省略する」ということが主題となっているものと思います。見出しも Processing Instructions and the XML Declaration となっていますし。

Processing Instructions and the XML Declaration以下の文章の流れを、自分は以下のように解釈しています。

  1. いくつかのブラウザは、XML処理命令やXML宣言をうまく扱えないよ。
  2. そういうブラウザとの互換性を考えるのであれば、処理命令やXML宣言を外したいと思うかも。
  3. しかし思い出してほしい。文書がXML宣言を含まないとき、HTTPのような上位のプロトコルでエンコーディングが指定されていなければ、使用できるのはUTF-8かUTF-16だけだよ。

互換性を考慮するにあたっては、単にHTMLの側の事情のみを考えるのは不十分で、XML側の事情にも配慮してはじめて互換が達成できるわけですから、「XML宣言を外す」という命題において「XML側ではこのような事情がある」という点に言及することは、やはり必要なことだと思います。

* * *

……という風に考えたのですが、答えになっているでしょうか。