JIS漢字コードには丸付き文字が含まれていないという言い方がされることが
よくあるが、これはいくつかの意味で正しくない。
まず最初のJIS漢字コード規格といわれるJIS X 0208においても、丸付き文字
は定義されていた。丸付き文字を表現するための外枠の丸を指示するコードポ
イントが用意され、その外側の丸と数字そのものを組み合わせて、つまり合成
文字によって丸付き文字を表現するものとされた。
合成文字そのものは、当時の文字コードではウムラウトなどの形で一般的だった。
そのため、合成文字による表現が可能であるだろうという判断が成されたわけだ。
現在の私達が一般に想像するところの、あらかじめ丸の中になんらかの数字が
入った文字であるところの丸付き文字という文字へのコードポイントは、用意
されていない。これが丸付き文字が存在しないという認識つながる。
さて実際のところ、丸付き文字を合成文字で表現するという規格が想定した使
い方がどれだけ一般的だったのかと言えば、そのような使い方をされた例は
ほとんど存在しなかった。つまり丸付き文字を合成文字で表現しうるという
規格の時点での想定は、誤りだったということになる。
規格における想定が誤りだったことと、定義されていなかったこととは違いが
ある。定義が成されていなかったとすれば、定義しようという話になるが、な
まじ合成文字で処理する、処理できるに違いないという方針が決定されていた
がために、JIS規格への取り込みが遅れた。
丸付き文字は、法律で使われているかどうかとは別に、当時から一般に使われ
る文字であったに違いない。最初から丸付き文字を表現するための仕組みが用
意されていたことからも示唆される。実際には使いものにならなかったことは
さておき。
実際には丸付き文字は頻繁に出現する文字であり、かつ合成文字で表示する方
法は実際には使いものにならないことから、各メーカーが独自に丸付き文字へ
のコードポイントを割り当てるという動きにつながった。これがいわゆる機種
依存文字である。そのようなコードポイントが割り当てられた機種だけでは、
その機種において丸付き文字を使用できることとなる。しかしこれは機種の違
いを超えた運用を妨げることであり、「インターネットでは丸付き文字などの
機種依存文字を使わないこと」といったスローガンにつながる。
さて再びJISに戻るが、1997年にJIS X 0208:1997という規格が制定された。
これは様々に画期的な事柄を含んでいる。一つは、過去の誤りを認めるという
ことをしたということ。過去の誤りというのは様々なものが存在していたのだ
が、そのうちの一つが、丸付き文字を合成文字として表現できるものとしてき
た過去の規格における想定は誤りだったと認めたこと。
つまり、JIS文字コードにおいても、あらかじめ合成された丸付き文字を含め
るようにしようという判断にいたった。実際には丸付き文字そのものは、JIS
X 0208のコードポイント内に収めるわけではなく、また別の規格であるJIS X
0213のコードポイントに収めることとなった。これでようやくJIS文字コード
に、あらかじめ合成された丸付き文字が収録されることになったのである。
このように過去の誤りを認め、それを解決する規格を制定するという動きが出
たことは極めて重要で、高く評価するべきなのであるが、しかしその動きが表
れたのがあまりにも遅すぎたということもまた事実である。
Unicodeという規格においてはすでに丸付き文字は収録されており、JIS X
0213ではその丸付き文字との対応関係が定義されている。つまり結果的には
Unicodeの後追いとなったわけである。
さてJIS X 0213において丸付き文字が収められたが、では何をどう収めること
にしたのか。丸付き文字と一言で言ってもいろいろな種類がある。
一般に想定するのは丸付き数字で、丸1、丸2といったもの。まずはこれを入れ
るのがよいだろう。では数字をいくつまでいれるのか。丸1〜丸9でいいか。い
や、丸10、丸11といった表現もよく目にする。では丸20まででいいか。実際の
ところ出現する文字を見たところ、丸100などといった表記すらしばしば目に
する。
では、丸1〜丸100の100個でいいのか。丸A、丸Bはどうだ? 丸a, 丸bは? 丸あ、
丸アは? どこまで文字を定義していいのかの限度がわからなくなる。ここまで
考えると、元々の「合成文字で表現するべし」と判断した気持ちがわからなく
もなくなる。しかしそれは不可能だとすでに判明した。過去の失敗を再び繰り
返すわけにはいかない。
という考察を経た上で、JIS X 0213においては、丸1〜丸50が収録されている。
これが「完璧」でないのは自明であるが、出現頻度とコードポイントの消費量
などとのバランスで決定されたということ。
さてこのような話をすると、「いや現在はすでにコンピュータの性能は向上し
ており、いくらでもコードポイントを消費してもいいのだから、すでに存在し
ている文字には全てコードポイントを割り振るべきだ」という主張が出てくる。
丸100という文字が一個でも使われているのだったら、その文字にも対応する
べきだと。コードポイントはいくらでも消費していいのだから、存在している
文字には全て対応するべきだと。仮にこのような主張の持ち主を板村君と名付
けるとして、板村君の主張にはどの程度の現実性があるのか。
先程の思考実験からして、出現しうる文字には本質的に限度が無いことがわか
るだろう。まず丸100まででいいのか。実際には出現する文字としては丸100を
軽く超えて出現することがある。そのような印刷物は実際に存在する。
では数字は1000くらいまで対応しておけばいいのか。まずは中の数字はそうだと
仮定してみよう。ではひらがなは? カタカナは? それらも全部対応しよう。
アルファベットは? これも全部対応しよう。
ローマ数字は? これも桁が問題になるが、20くらいまでは対応しよう。
漢数字は? これも二十くらいまでは対応しよう。
漢字は? これは…。でも丸上、丸下といった文字も実際に定義されてるんだよな。
どこまで対応すればと言われると…。
内側にいれる文字だけではなく、外側の丸も問題になるだろう。
形は丸だけではなくて、四角も、三角もある。これも対応しよう。
角が丸い四角も存在する。◇もあるだろう。これも対応しよう。
丸についても、二重丸もありうる。これも対応しよう。
丸の中に文字を入れるという形式だけではなく、黒丸の中に白抜きで文字が
表示されるという例もある。これも対応しよう。
さてそれだけではない。現在は1という文字は単に1という文字として扱ってい
るが、この文字の書体はどうだろうか。セリフ付き文字だけでいいのだろうか。
セリフ付きの1による丸付き文字とサンセリフの1による丸付き文字とを区別し
た方がいいのではないだろうか。もしかして冗談言ってると思ってる?
しかし実際には、Unicodeにおいては、セリフ付き1の丸付き文字、サンセリフ
の1の丸付き文字、また白抜きのセリフ付きの1の丸付き文字、白抜きのサンセ
リフの1の丸付き文字にはそれぞれ別々のコードポイントが割り当てられている。
Unicodeに対応するというのはこういう文字全てに対応するということなのである。
いままでざっと登場しうる要素を見てきたが、そのそれぞれの要素において、
どこまでを限度として扱えばいいのかは本質的に規定できないことがわかる。
つまり全ての登場しうる要素の組み合わせをあらかじめ想定してそのコード
ポイント全てを割り当てるということは、丸付き文字一つに限ったとしても
現実的ではない。
ここでは漢字については言及していないが、実際のところは丸付き文字の難し
さとは比べものにならないほどややこしい問題が絡んでくる。丸付き文字であ
れば問題の拡がりがどの程度かを説明することは簡単なのだが、しかし漢字に
おいてはその説明をするための前提条件を整えることすら難しい。つまり、あ
「そもそも漢字って何よ?」という話になるわけだ。私達は普通に自分が漢字
を使いこなしていると思っている。しかし丸付き文字の考察を通してみても、
簡単そうに見えていた丸付き文字は実際のところは様々な問題を抱えているこ
とがわかる。実際のところ漢字一文字一文字は、この問題の考察よりももっと
複雑な経緯を持っている。それらの文字一つ一つも問題をときほぐしていかな
ければ、議論の前提条件すら築けないのである。
しかし、文字コード長を無限大にまで長くしていけば、前述したような合成文
字全てを処理できるのではないかという発想もありうる。例えば「角が丸い四
角に白抜きで512とサンセリフの数字で書かれた文字」という文字列を一文字
として扱えるようにすると。これはこれでアプローチとしてはありうる。
原理的に考えると、丸付き文字の考察から対象は2のベキ乗で増えていく性質
も持っていることがわかる。コンピュータの性能は向上していると一般に言わ
れるが、実際のところはそんなに極端には向上しているわけではない。今でも
コンピュータは一般にNP問題を解決することはできないし、また本質的に計算
停止問題を扱うことはできない。
極端に文字コード長を長くしていかなる文字でも処理できるようにするという
ことは、どういうことかと言うと、文字をプログラムとして扱うということで
ある。そうすると、ある文字列を与えられたとして、その文字列をどれだけの
時間で処理できるかを事前に予想することができなくなる。というよりも、そ
の文字列処理が現実的な時間内で停止しうるかどうかを事前に定義することが
出来なくなる。つまりチューリング・マシーンの停止問題が出現する。これが
「無限の文字コード長」というアイデアがあまり現実的ではない理由である。
実を言うと、私はこの「無限の文字コード長」というコンセプトを具現化する
ことが目標の一つである研究プロジェクトに参加している。そこではどのよう
にこの問題に対処しているのかと言えば、要するに割と控え目に対処している。
存在しない文字をその場で定義して用いるということがすでに出来ているわけ
ではなくて、あらかじめかなり大きいコードセットにたくさん対応することに
よってすでにいずれかの規格に存在する文字については使えるようにするとい
うことをしていることになる。
板村君の理想は、ここではまぁそれなりに実現できているということになるわけだ。
以上、現時点ではまだ個々の事例についての調査を行っていない。
批判、修正、追加情報歓迎。
■JIS X 0208
http://www.noge.com/koba/network/mail/JIS-X-0208.html
>2-94 227E ◯ 合成用丸
http://ja.wikipedia.org/wiki/JIS_X_0208
■JIS X 0208:1997
■JIS X 0213
http://ja.wikipedia.org/wiki/JIS_X_0213
http://www.kanzaki.com/docs/jcode.html
■JIS X 0213 丸付き文字
pp. 863 丸付き文字など
芝野耕司「JIS漢字字典」日本規格協会, 2002.
http://www.amazon.co.jp/exec/obidos/ASIN/4542201295/
■JIS X 0213 丸付き数字
http://www.izu.co.jp/~at-sushi/aozora/not_kanji/19.html
■Unicode 丸付き文字
http://www.unicode.org/charts/
http://www.unicode.org/charts/PDF/U2460.pdf Enclosed Alphanumerics
http://www.unicode.org/charts/PDF/U2700.pdf Dingbats