文書文字集合

質問

XML や HTML の「文書文字集合」とは何ですか? それは私の文書に使っている符号化とどのような関係がありますか?

回答

話を簡潔にするため、そして一般的な慣行にならって、 この FAQ 内で Unicode に言及しているときは、 Unicode と ISO/IEC 10646 の双方で定義されている文字集合を指しています。

XML と HTML (バージョン 4.0 以降) の文書文字集合あるいは基本文字集合は、 同一のコードを採用する ISO/IEC 10646 および Unicode の双方の標準で定義されている国際文字集合 (Universal Character Set, UCS) です。

これは、XML や HTML の処理方法を説明する論理モデルは Unicode の文字集合にならって説明されるということです。

これは全ての HTML や XML 文書が Unicode として符号化されねばならないということではありませんが、 これらの文書は Unicode で定義されている文字しか含むことができない、ということになります。 ここで、文字集合と文字符号化は異なるものであるということに注意してください。 例えば、Unicode の全レパートリは UTF-8、UTF-16 や UTF-32 のように1つ以上の方法で符号化することができます。 また適切に宣言され、Unicode のレパートリのサブセットである限り、 どのような符号化でも文書に使うことができます。 (サブセットでない符号化方式は極めて稀です。)

他方で、可能な限り Unicode の符号化方式を用いることは良い考えです。 それにより Web の国際化の様々な側面が単純化されますし、 多くの HTML ユーザエージェントや全ての XML プロセッサでサポートされています。

文書文字集合の重要な帰結の1つは、文書の符号化方式にかかわらず、数値文字参照 (例えば LATIN SMALL LETTER G WITH ACUTE は ǵ および ǵ) の値は Unicode の文字として解釈されるということです。 これは違いをあまり理解していない人達がよく間違える点です。

ところで

実際には、全ての Unicode 文字が XML や HTML のどこにでも使える訳ではありません。 例えば、ある種の文字は要素名などには使えませんし、 ある種の制御文字は内容に使うことはできません。 しかしながら、XML 1.1 では XML 1.0 に比べ非常に多くの文字が要素名などに使えるようになっていることに注意してください。

歴史的な情報

HTML 2.0 は、HTML 文書中の全ての文字は ISO 8859-1 (ISO Latin 1 としても知られる) に照らして解釈されると定めましたが、 一方で全ての将来の HTML のバージョンはそれのスーパーセット、 すなわち Unicode (あるいは ISO 10646) を採用するだろうとも予告しました。 これは世界中の莫大な数の文字が使えるということです。

インターネット上で Unicode を使うための正しい方法に関する議論 (1997年4月発行の RFC 2130、 および1997年1月発行の RFC 2070) は HTML 3.2 が1997年1月に勧告されたときにはまだ終わっておらず、 そのため HTML への Unicode の導入は1997年12月発行の HTML 4.0 まで待たねばなりませんでした。