初版 2010/4/5
第2版 2013/5/10 誤解を修正。全面的に書き直し。
第3版 2014/7/13 なるべく分かりやすく全面的に書き直し。
第4版 2015/5/20 さらに分かりやすく全面的に書き直し。
Unicode正規化の考え方はとてもシンプルです。でも、いろいろ調べて知ろうとすると、用語がハイコンテキストすぎて、混乱してワケがわからなくなります。図にしてみましょう。
「Compose(合成)」が異なった意味で同時に使われていることが分かります。ここから以下のような説明文ができあがります、
- 合成済みの文字を分解すると合成された文字になる。
- 合成された文字を合成すると合成済みの文字になる。
もはや人間が理解できる言葉ではありません。ハイコンテキストというより、人に伝える言葉としておかしい。これで混乱するなというのは無理です。どうしてこんなことになっているのでしょうか?
答えを先に言うと、この混乱は、UnicodeとUCSの2つの規格で使われている用語を混在させているのが原因です。
UnicodeとUCS
UnicodeとUCSの関係を簡単に説明しておきます。Unicodeは私企業の団体が決めた標準規格、一方のUCS(ISO/IEC 10646)は公的な国際標準規格です。大人の事情でUCSはUnicodeをそのまま呑み込むことになり、文字コードの規格として両者はまったく同じものです。でも、両者の規格書の「解説文」は、それぞれが作成しているので同じではありません。とくに用語の相違が著しい。
用語の相違
まずUnicodeの用語を見てみましょう。
UAX#15のRevision 41から採取。日本語訳は英日用語集から採取(ただし「結合文字の並び」は採用せず「結合文字列」を採用)。
混乱していません。「Compose(合成)」は「1つの文字コードで1文字」だけを意味しています。一方の「複数の文字コードで1文字」は「Combinig(結合)」とし、用語でも対応関係を明確にしています。
次にUCSの用語を見てみましょう。
2014-09-01版PDFから採取。日本語訳はJIS X 0221から採取。
見て分かるように、UCSでは「1つの文字コードで1文字」を指す用語が存在しません。そもそもUCSは「複数の文字コードで1文字」から「1つの文字コードで1文字」への変換そのものを想定していないのです。
つまり、UCSの用語体系では、Unicode正規化を解説できません。そのため規格書の「21 Normalization forms」では「Normalization forms … are specified in the Unicode Standard UAX#15」とUnicodeへ丸投げし、自ら解説することを放棄しています。
提案
冒頭の用語の混乱は、UCSの用語体系で無理矢理にUnicode正規化を表そうとした結果です。しかも、UnicodeやUCSに深く関わった人ほど、混乱した用語の使い方をする傾向があります。「複数の文字コードで1文字」はUCSが発祥であり、UCSがオリジナルという意識があるのかもしれません。しかし、他人に理解してもらう言葉として、適切さを著しく欠いているのはあきらかです。しかも今や「複数の文字コードで1文字」はほとんどがUnicode正規化の文脈で用いられるものです。UCSの用語体系に拘泥する理由はどこにもありません。
用語の混乱を防ぐために、以下の3点を提案します。
- Unicodeの用語体系を採用し、さらにその体系を前提にしていることを自明とする
- あえてUCSの合成を示すときは「UCSの合成」と明示する
- 「合成文字」という用語を使わない
「合成文字」は現在「複数の文字コードで1文字」を指す誤用がはびこっています。UCSでも「合成列」であって「合成文字」とは書かれていません。コミュニケーション不全の元凶なので、使わない方がいいでしょう。
ISOって市井のユーザーから提案するパスはあるんでしょうかね〜
ものかのさん提案してください!
最後のは英語の曖昧さの問題ですね。
これもものかのさん「用語にハイフンを付けてください」と提案してください!
フクロウ本の訳語はなんだか、どっちでも取れるように書いている気がしますが〜
UCSの合成のアイデアはUCSが発祥らしく、そうした歴史的経緯のある基礎用語の変更は相当難しいと思います。UCS内では整合していますし…
「combining character sequence」の問題は、Unicodeの対訳用語集を見ると「結合文字+の並び」「組合字符+序列」「suite de + caractères combinatoires」なので、combining-character sequence なんですよね…。かなり根深い…。
フクロウ本(第3版)は、p.129に「U+0061とU+0300の結合文字全体にマッチ」とあって、基底文字も結合文字扱いになっちゃってます(原本がそうなっているんじゃないかと推測)。「結合文字シーケンス全体にマッチ」ならよかったんですけど。