第37回 文字符号化方式にまつわるジレンマ Page 2

川俣 晶
株式会社ピーデー
2005/9/13

日本語利用者に関係の深い文字符号化の自動検出

 次は、決定的内容モデルとはまったく関係ない話題に飛ぶ。「F Autodetection of Character Encodings (Non-Normative)」、JIS X 4159では「附属書F(参考)文字符号化の自動検出」となる部分を読んでいこう。XMLでは、文書を記述するための文字符号化方式(UTF-8やシフトJISなど)を複数認めている。それらをいかにして扱うかを、ここでは説明している。これは、日本語文書を記述するためにシフトJIS、EUC-JP、UTF-8などを混用している日本語ユーザーには特に価値のある情報といえるだろう。ただし、Non-Normative(参考)と記述されているとおり、これは規定ではない。

 さて、前ふりの本文を読んでいこう。

The XML encoding declaration functions as an internal label on each entity, indicating which character encoding is in use. Before an XML processor can read the internal label, however, it apparently has to know what character encoding is in use―which is what the internal label is trying to indicate. In the general case, this is a hopeless situation. It is not entirely hopeless in XML, however, because XML limits the general case in two ways: each implementation is assumed to support only a finite set of character encodings, and the XML encoding declaration is restricted in position and content in order to make it feasible to autodetect the character encoding in use in each entity in normal cases. Also, in many cases other sources of information are available in addition to the XML data stream itself. Two cases may be distinguished, depending on whether the XML entity is presented to the processor without, or with, any accompanying (external) information. We consider the first case first.
XMLの符号化宣言は、各実体の内部ラベルとして機能し、どの文字符号化を使用するかを示す。しかし、XMLプロセサは内部ラベルを読む前にどの文字符号化が使われているかを知る必要があり、これが、内部ラベルが示そうとしていることにほかならない。一般的には、これは絶望的な状態となる。しかし、XMLにおいては、完全には絶望的ではないが、これは、一般的な場合に対する次の2つの制限を、XMLが加えていることによる。1つの制限は、どの実装も有限個の文字符号化だけをサポートするものと見なし、ほかの1つは、XMLの符号化宣言の位置および内容を制限して、各実体で使用する文字符号化の自動検出を可能にする。また、多くの場合に、XMLのデータストリームに加え、ほかの情報が利用できる。ここでは、XMLの実体がプロセサに渡されるとき、(外部)情報を伴うかどうかによって、2つの場合に分ける。

 XMLの符号化宣言とは、XML宣言やテキスト宣言に含まれる「encoding="Shift_JIS"」というような表記のことである。例えばXML宣言にこれを含め、以下のように記述すれば、そのXML文書、より正確には実体(文書実体)がShift_JISで記述されていることが明示され、文字化けを回避できる。

<?xml version="1.0" encoding="Shift_JIS" ?>

 次は、非常に悩ましい問題を示している。つまり、符号化宣言の記述と、それを読み込むという処理は、互いにニワトリと卵の関係にあるのだ。正しく読み込むためには、符号化方式を知っている必要があるが、それは読み込まねば分からないのである。正しく読み込むために必要な情報は正しく読み込まねば手に入らないわけで、一般的にはこれは「不可能」と呼ぶに値する。

 当然、XMLが認められ、利用されているということは、このような「不可能」な状況は回避されている。次にその理由として、XMLが課している2つの制限があることを説明している。その2つの制限とは、その後に述べられている。

 この2つの制限は、組み合わせることにより大きな力を発揮する。符号化宣言の位置と内容が制限されることにより、ある符号化方式であると仮定した場合にその情報を読み取る処理が容易に記述できる。そして、有限個の文字符号化だけをサポートすると見なすことにより、そのような処理の数は有限個しか存在しないことになる。つまり、未知の符号化方式まで含めてすべてに対応する実装はないと仮定することにより、「不可能」がこのケースに限っては「可能」になるわけである。これについての詳細は、後で詳しく説明される。

 XML文書に使用されている符号化方式を知る手段は、XML文書そのものを含むデータストリーム(つまり、データの列)のほかにもあるとしている。例えばHTTPで使用されるcharsetパラメタがその例の1つといえる。それに関する詳しい話も、後で出てくる。

 2つの場合は、それぞれ「F.1 Detection Without External Encoding Information(F.1 外部の符号化情報がない場合の検出)」と「F.2 Priorities in the Presence of External Encoding Information(F.2 外部の符号化情報が存在するときの優先順位)」で詳しく説明されている。(次ページへ続く)

2/3

 Index
やさしく読む「XML 1.0勧告」 第37回
文字符号化方式にまつわるジレンマ
  Page 1
・決定的内容モデルと文字符号化方式
・決定的内容モデル
Page 2
・日本語利用者に関係の深い文字符号化の自動検出
  Page 3
・外部の符号化情報がない場合の検出


連載 やさしく読む「XML 1.0勧告」


XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間