数値文字参照とは

数値文字参照(Numeric Character References。略してNCRということもある)とは,非ASCII文字をASCII文字で表すというHTML文書で用いられるエスケープ法で,&# と ; の間に文字コード番号をはさんで記すものです(16進数を使って,&#x ; としてもよい)。

Webページのマークアップ法を規定するW3Cによれば,HTML2.0ですでに数値文字参照はBasic Larin (ASCII)およびLatin1の文字に対して利用できていました。例えば,A はAの文字を表します。それをW3C勧告 HTML 4.0からは,ユニコードに対して用いることにしました。日本語にない文字に数値文字参照を用いれば,「メモ帳」などでも編集でき,編集中のアプリケーションの仕様による文字化けが防げます。

例えば,「あいうえお」という文字列は,数値文字参照で表現すれば,
あいうえお (←「あいうえお」と表示されていますか?)
あいうえお
あいうえお (←「あいうえお」と表示されていますか?)
あいうえお
となります。これはHTML 4.0に対応しているブラウザなら利用できるはずのものです。

注意。しかし,HTML 4.0以前の未対応ブラウザ,具体的にはInternet Explorer 3やNetscape Navigator 3などでは,latin1領域外の数値文字参照(Ā以上)を解釈することができません。これらのブラウザをまだ使用している人もまだそこそこいるようです。そこで,数値文字参照でユニコードを指定する場合は,こうしたユーザーを念頭に入れる必要があります。それには,他言語の文字をローマ字または画像で用意する,あるいは多言語に対応した人(ブラウザ)だけを対象にしているのだと割り切る,などの選択肢があると思います。

数値文字参照を利用すれば,HTML文書をどんな文字コードで作成してもユニコードの任意の文字が使えるようになるというのがW3Cの勧告です。ですから,文書全体の文字コードをユニコードにしなくても,多言語が実現できます。Internet Explorer 4以上のバージョンではW3Cの勧告に準拠していますが,Netscape Navigator 4.04では実装が不充分です。即ち,ユニコードの数値文字参照は解釈できるのですが,それを正しく表示するには条件があるようです。つまり,
  1. 文字コードセットが,その数値文字参照が指定する文字を含む(例えばShift_JISのhtml文書の中で,あいうえおと書いておくとこれは「あいうえお」と表示できる);
  2. 文字コードセットがユニコード(UCS-2またはUTF-8)であって,Unicode向けにブラウザで指定されているフォントで表示できる;
  3. 文字コードセットがユニコード(UCS-2またはUTF-8)であって,その数値文字参照が正しいFONTタグで囲まれている(「正しい」とは,その文字が表示でき,かつ,そのマシン(閲覧する人のマシン)にインストールされているフォント名が指定されているということです);
これらのいずれかでなければならないようです。

具体例を挙げますと,数値文字参照で例えばハングルを表示させるためには,文字コードセットをUnicodeにして,であって,指定されたフォント名がそのマシン(ハングルのフォント名としてはwindowsではGulimCheが,MacintoshではSeoulが一般に通用しているようです)に入っている必要があります。

Internet Explorer 4以上ではブラウザのフォント設定は,日本語=MS Pゴシック,ラテン語基本=Times New Roman,韓国語=GulimChe,簡体字中国語=MS Songのように「言語セット」別に設定し,ユニコードに対しては「言語セット」ごとにフォントを自動的に切りかえています。そのためUnicode用の特別なフォント(多言語フォントを一つのファイルに収めたもの)がなくても,既存のフォントファイルを組み合わせることで多言語表示を可能にしています。

それに対してNetscape Navigator 4.04では,フォント設定を言語ごとではなく「文字コードセット」別に行っています。ユニコードも文字コードセットの一つとして,それに対して用いるフォントを一つだけ設定することになります。そのため文字コードセット=Unicodeに対して設定したフォントに入っていない文字は表示できないのです。即ち,Netscape Navigator では,Unicodeの文字現状では多言語(正確には多「文字コードセット」)を使用したHTML文書は,いちいちフォント名を指定しなければならないということです(あるいは面倒でもUnicodeのフォント設定を閲覧者に切り替えてもらう)。

これでは,フォント名を折角指定しても,相手のマシンで利用できるフォントと食い違っていれば,読めないという結果になります。本来はInternet Explorer 4以上ように,ファント名を指定しなくても,言語サポートがありさえすれば適当なフォントをブラウザが選んで表示するというのがあるべき姿だと思います。今後のバージョンに期待したい所です。


戻る