目次へ

コンピュータに於ける文字の入出力のしかけ
(解説:未定稿)

佐藤 敬幸 (Takayuki K. SATO) 1)
(財)国際情報化協力センター 国際情報化研究所 主任研究員

1) Chief Researcher, R&D Division, Center of International Cooperation for Computerization (CICC)108-0073 港区三田 3-13-16 三田43森ビル15F国際情報化協力センター国際情報化研究所 Fax: 03-3457-0944; E-Mail: sato@net.cicc.or.jp; http://www.cicc.or.jp 本資料は佐藤敬幸著「情報技術の標準化―アジア地域における日本の国際協力Japanese Co-operative Activities for Asian Region in Area of IT Standardization」に付随する1999-10-12付け解説として執筆された。未定稿。

はじめに
1 文字の入出力は、どう、なぜ謎か?
2 コンピュータの構成
3 情報処理部
4 文字出力部
5 入力部
6 文字の数の拡大
7 文字合成法
8 結び

はじめに

 情報機器の「国際化」と称することにかかわるセミナ・研究会等々の設立が周期的に数年毎に提唱されている。しかし、この20年、その内容にはほとんど進歩が認められない。また、このような会合で「国際化」の専門家がなにか話しても結局「国際化」は良く判らない「薄気味の悪いもの」という印象を与えただけで終わっているようであり、ほとぼりがさめると、また「国際化」が話題に上るといった繰り返しが認められる。

 そこで、なぜ「国際化」というものが多くの人にとって判り難い謎であり続け得るのかを考えてみた。その結果、多くの人にとって、現在進行している「国際化」の技術の話題の前提であり、ほとんど「国際化」の中では議論にならない、文字の入出力そのものが「国際化」だという認識があり、いろいろな文字をどう入出力するかということを知りたいのに、ちっともそれが納得出来ないうち、実際には話題にもならないうち、に話が終わってしまうという結果に終わっているのでは無いかと考えた。つまり、進行中の話はうわの空で文字の話が出るのを今か今かと待っているうちに、お話は終わってしまうということでは無いかと想像した。
 現実に出て来るのは「文字コード」だけで、文字そのものの話はほとんど出ない場合が多い。

 そこで、「国際化屋」にとっては、すでに既知で安定している課題であり、話題性には乏しい、とは言え、「国際化」を議論する時の暗黙の前提条件である「文字の入出力」についての解説を試みる。

Top

1 文字の入出力は、どう、なぜ謎か?

 情報機器を「国際化」しようとすると、まず解決を迫まられると考えられるのが言葉の問題である。この自分の言葉で情報機器を利用するためには、まず文字に目が行き、それを達成するのが「国際化」だと誰しも考える。そこで、それをどう達成するか理解しようと試みるが、なかなか回答が得られない。「国際化」の専門家に「国際化のことを教えて」と言っても、なぜかこのことは話してくれず、何か判らないことを言っている。恐る恐る文字のことはと聞いてみると、「あれは、もう済んだ課題で気にしなくて良い」などと言われるが釈然としない。

 翻って、自分で勉強をしようと、本や文献を探しても、なかなかそれについて書いたものは見当たらない、多くの場合、取扱い説明書に、コード表とキーボードの配列が書いてあるので、これらが鍵かなと思ってその道の人に聞いても良く判らない。コードの話を聞くと、ますます混乱する。コンピュータに詳しいという人に聞いても要領を得ない。というのが実状ではないだろうか。

 このことは、実は、多くの情報処理技術者にとっても同じことで、情報処理技術教育は、そのほとんどが文字通り、情報の処理や伝達・保管と言ったことについて行われ、文字の入出力は、それらのこととは独立しており、“既にあるもの”として扱われている。今となっては、教育する立場の人も“それに付いては考えたことも無い”で済まされる年代になりつつある。

 つまり、一番目に付くことではあるが、当然あるものとして無視されて来ていたのが文字の入出力である。また、技術的にも、多くの情報処理技術者にとっては知らなくても十分間に合う話で、欲しい環境はどこかの誰かが作ったものが降って来ると思っている事項である。

 一方、たまに奇特な人が、文字の入出力のところを“改造”して、いろいろな文字を入出力出来るようにしたりすると、自身も周りの人々も大変な技術だと褒めそやすが、それを国際化屋に持ち込むと、全く相手にされない。

 途上国にはこのような文字入出力技術がたくさんあるが、これも国際化屋は無視してしまう。あれは一体何だろう? もう少し国際化の勉強がいるかなとますます深みにはまるが、どうしても回答を持っている人に遭えない、ますます謎は深まるばかり、というのが実状のようである。
 つまり、これは、あまり大切では無いので、知っている人はあまりいないし知らないで済む話であるが、気になりだしたら抜けられなくなる。本当は、関係が無い問題と割り切ってしまえばそれまでなのだが、それ以外に「国際化」の課題が無いと信じている頭はなかなか切り替わらないということのようである。

 特に欧米では、文字の入出力はあまりにも自然なことなので、「洋書」をあさっても回答が無い。欧米の学者などの話で、こんなことが話題になることはまず皆無である。たまに欧米人が学会などで発表しても。「国際化屋」は見向きもしない。ということで、謎は深まるばかりである。

Top

2 コンピュータの構成

 ここから具体的に、文字の入出力の解説をする。

 まず、文字の入出力を理解するために、それが一番判りやすいような、コンピュータの構造を説明する。

 入出力という視点でとらえると、コンピュータは、入力(入力処理)部、情報処理部および、出力(出力処理)部の三部構成で出来ている。

 情報の蓄積(メモリやデスクなど)や、情報の交換(データ通信など)もネットワークも含んで巨大な情報処理部と考えて良い。

* 入力部: 外部から(キーボードなど)何らかの操作をし、その結果を、コードによる文字データに変換して情報処理部に渡す部分。キーボードが代表的であるが、音声入力でも、光学的文字読みとり装置でも、最終的に文字のコードに変換して情報処理部に渡しさえすれば何でも良い。

* 出力部: 情報処理部から渡された文字コードによるデータを、出力に必要な操作をした後、出力装置を通して出力(表示や印字)をする部分で、装置としては、プリンタやデスプレィが代表的であるが音声出力や点字・バーコード印字など何でも良い。

* 情報処理部: 文字コード等によるデータを、操作や処理・判断・加工をしたり、メモリやディスクに蓄積したり、通信装置を通して他の情報処理部とデータを交換したりする部分である。

 このように見ると、入力部は、入力手段は何であれ、そこに入ったものを、入力装置の如何にかかわらず、情報処理部が扱える(統一された)データに変換して、情報処理部に渡す装置であり、出力部は、それと逆に、情報処理部にある、出力装置の如何に関わらない(統一された)データを受け取って、出力装置の都合に変換して見える形にする装置である。

 そして情報処理部は、入出力装置の如何にかかわらず、自分の都合の良い(統一された)データを受け取って、それをいろいろな「いわゆるコンピュータによるデータ処理」を行い、そのまま出力装置に渡すだけである。

 この中で情報機器が期待される役割を果たすのは、情報処理部であり、情報処理教育も文字通り情報処理部をどうするか、どう作るか、どう発展させるかに視点をおいているので、入出力は、周辺技術扱いされるのは自然であり当然である。

 ここで、もう一つ注目したいのは、入力と出力は情報処理部で切り離されており、それぞれが独立していることであり、一般に考えられているほど相互に深い関係は無いことである。

 この独立した関係は、古い情報機器では、それぞれが独立した機械で代表されていたから判りやすかったが、最近はPCのように一体化しているので、それぞれ切り分けたものとして認識することが困難になってきている。

Top

3 情報処理部

 情報処理部には、文字データだけではなく、数値データや制御データ、さらにはプログラムそのものなどが、(広義のデータとして)一緒に、区別無く、1と0(on/offでもなんと呼んでも良い2値)の形で保管され、処理・伝達されている。特に文字と言う形で直接認識出来るものは何も入っていない(バイナリー・データと呼ぶことが多い)。

 この広義のデータの中から、(その一部である)プログラムが、これは文字だとか、数値だとかという判断をする。時には同じデータが文字としてもプログラムとしても使用される場合すらある。このプログラムが、出力部にデータを渡すと、出力部はそれが何であれ、処理部を信用して、出力部が知っている文字だと信じて、そのデータに対応する文字を表現する。

 また情報処理部は、どんな入力であれ、入力処理部で作られた1と0の組み合わせのデータを入力として受け取るだけであり、プログラムが、それを文字と思えとか、数値と思えとか、プログラムと思えと必要があれば指定する(必要がなければ指定せずそのまま受け取り、自分のバイナリーデータとして扱う)

 この情報処理部の中で、バイナリの形で表されている文字データが、バイナリの値が(1と0の組み合わせが)どうなっている時には、どの文字だと定義しているのが、文字コードである。

つまり、出力部は情報処理部から渡されたバイナリデータを、自分が知っている文字コードと信じて、文字を表現する。また、情報処理部の内部でも、バイナリデータを文字と思って処理する時には、自分の知っている文字コードだと理解して処理するだけである。

 つまり、コンピュータの中には、直接的な文字データは存在しない。

 情報処理部内部や、通信を介して他の情報処理部と情報交換したり、蓄積したりする場合、時に、それぞれの認識すべき文字コードが異なる場合も多いが、このような時には、必要に応じてコードの変換をするので、この議論では、情報処理部は、単一文字コードで動いているものと想定して話を進めても問題ない。

 情報処理部で“文字”として取り扱える1と0の組み合わせの総数は、古くは94であったが、現在は、基本的には188+2=190との前提で、ほとんどのコンピュータは出来ている。これからは説明を簡単にするために、0から9までの番号を付けた10種類であるように仮定して説明を続ける。

Top

4 文字出力部

 文字出力部は、情報処理部が、文字出力部に渡す全てのデータを、それが文字データと判断して、文字として表示したり印字したりするように出来ている。情報処理部には、バイナリの形で、文字だけではなく、数値やプログラム等も入っているが、それらのどのデータも出力部になんらかの理由で渡されると、それは文字として出力される。(当然、それらは文としては意味の無いものとなる)。

 前の仮定の場合、0から9までの10種類のデータが情報処理部から出力部に渡されることになる。

 この場合、文字は濁音の片仮名の「タ」と「゛」の二文字が「ダ」という一文字を作るようなことはなく、英語のアルファベットのように、それぞれの文字が完全に独立した形を持ち、それを一定の方向に並べて行くと、文章になるという前提条件で一般的には出力部は出来ている。

 出力部には、フォントと呼ばれる文字の形のデータが、この事例の場合、0-9に対応した10種類の形(絵・図形)が準備されており、情報処理部から渡されたデータの、この番号に対応した、図形を出力する。

 この図形は何でも構わない、もしそれがAからJまでも英文字でも、アからコまでの片仮名でも、亜から化までの漢字10文字でもなんでもかまわないし。同じ文字でも、異なる書体でも絵としては異なるフォントデータとして格納してあれば、それをそれそれ出力することになる。また、文字で無くても、絵でも何でも良いわけである。だから、情報処理部が出力部に渡すデータが2番であれば、カタカナのフォントが入っている場合はウを表示するが、英語のフォントが入っていれば同じデータでもCを表示することになり、情報処理部が想定していないフォントが出力部にセットされている場合には、予想しない文字が出現することにもなる。いろいろな文字を表示するためにはこの仕組みを積極的に利用して行われる。

 ということで、ロシアのキリル文字でも、漢字でも、ハングルでも、フォントさえ出力部にデータとして収納してあれば、出力できるわけである。条件は、文字の数が188+2=190以内で、一方向に並び、完結した形さえ持っていれば、どんな言語にでも対応が可能になる。

 また、このフォントは適宜切り替えが可能であるので、必要に応じて色々な言語・文字や書体に対応することも、フォントの切り替えで行うことが出来る。要は欲しい形をフォントとして格納さえすれば、どんな形の文字でも印字や表示が出来るので、英語専用の出力部などというものは今では存在しない。なお、漢字の場合など190では文字数が不足な場合などについては、別途説明する。

Top

5 入力部

 出力部は、情報処理部から渡されたデータを、番号を合わせて連続して絵を出すだけであるから、それが言葉や文章として意味があるためには、個々の文字データが意味のある順序で情報処理部に蓄積・格納されている必要がある。このためのデータを人間が情報処理部に(できるだけ便利に)作れるようにしているのが入力部である。

 一番多く利用されているキーボードについて説明する。キーボードの各キーの上には文字が印字されており、それを押すとその文字に対応した1と0の組み合わせが作られるように見える。

 本当のところは、まずキーが押されると、どのキー(例えば最上段の右から3番目など)を押されたかの信号が作られる。この信号は、あらかじめ準備されている、どのキーを押せば、どんな1と0の組み合わせを作るかを指示する対応表と参照され、その結果を入力処理プログラムが文字入力として、情報処理部に渡されるようなしくみになっている。

 この対応表を入れ替えると、キーの配列はどのようにも変更できるし、同じ文字に対しても、どんな対応表でも作ることが出来るので、これも文字の数がキーの数の範囲内であれば、どんなキー配列でも作ることが出来る、(キーの表面に書いてある文字などの印は、ある特定の場合の便利のための参考程度と考えても良い) それはコンピュータを使用中でも変更することが可能である。このキーの数は、普通は188文字を想定して作られている。

 また、この対応表は、日本語のローマ字ひらがな変換のように、複数回キーを押した結果に、一文字対応させても構わないし、その結果複数候補があって、その中から更に人間が選択しても良い。

 つまり、各文字が、独立した形を持ち、一方向に並べられ、その数が、予定の数以内(一般には188)であれば、フォントデータとキーの対応表を入れ替えるだけで、コンピュータは、どんな文字にも対応できることになる。キーの上の表示は「単に便利のため」であって、真っ白でも構わないし、無関係な形があっても良い。つまりキーボード上のキー配列は、どうせどうにでも変えられるから、あまり重要な問題では無いことになるし、それがキーでなくて音声入力でも、必要なコードさえきちんと発生さえすれば、構わないことになる。

 もし漢字のように扱える文字の総数が190では不足の場合には、情報処理部が扱える文字の数を増やすことが新しい課題となるが、それ以外は、フォントデータを拡張してもっと多くのフォントの見出し番号に対応し、入力プログラムの中の対応表だけが複雑になるだけで、従来技術をそのまま拡大するだけで漢字にも対応できる。また、新しいフォントを作った場合でも、単にフォントデータの入れ替えであり、新しい方式の入力対応表を作っても、それは対応表の入れ替えだけのことで、システム全体には何の影響も及ぼさない。

 つまり、文字の入出力に関しては、とりあえずは、国際化とか多言語化と言っても目新しく挑戦しなければいけない技術課題は無く、従来技術で、十分対応でき、必要があれば、それだけ単独で開発できるということになる。(ここまで来ると、市場原理だけで動くことが出来る)

 ほとんどの、ラテン文字の変形した文字を使っている言語、キリル文字やヘブライ文字、欧州各国の文字などは、必要な文字の総数が188以下なので、この方法での対応で十分であり、その方法は標準化されていると言える。

Top

6 文字の数の拡大

 それでは、漢字のように190では足りない場合はどうすれば良いかを、0-9番の10種類の文字しか入らない場合を例に説明する。

6.1 一番簡単な方法は、10個の漢字を含むフォントを多数準備して、どのフォントの何番の文字というようにデータを用意すると、あたかも多数の文字が使えるように見える。初期の漢字システムには、このような方法で漢字データを表示するものもあったが、どのフォントを使うかを一々切り替えるという特殊な情報処理部とそれに対応する出力部が、当然、特殊プロセスとして必要になる。

6.2 次に、複数番号で一文字表すことが考えられる。例えば、上記の番号で、0に続く番号は、0+Xとして一個の番号と見なすというルールを作った場合。0に続かない1-9の9個と0に続く1-9の9個の合計18個の文字が指定可能になる。この場合、例えば0+3と3とは別物で、0+3は0と3を切り離されないようにしておく必要がある。例えば行の終わりに、0+3が来たときに、その行を0で終わって、次の行を3で始めるような(普通の)処理は使えない。また、0+2.4と言うようなデータがあった場合、0+2を消去しようとして2を消すと、0+4と言う、予想もしなかった関係の無いデータに変ることを避ける必要が出てくる。そこで、常に、これは0に続いている文字かどうか判定しながら文字情報のプロセスが必要になる。

 これは「0に続く」である必要は無く、「9が続く」0-8までの番号でも、どんな組み合わせでも良い。さらに、0か1に続く2-9と、単なる2-9の組み合わせの 24種類のような拡張も当然考えられる。

 現在のほとんどの漢字やハングルのシステムはこの方法で出来ているが、拡張の方法が、それぞれ少し異なり、日本の漢字システムが、韓国や中国と比べた場合、一番特殊で複雑に出来ている。

6.3 また、番号を組み合わせて、常に二つの番号の組み合わせを一文字と見ようという考え方で、0+0から9+9までの100種類に対応する方法もあるが、これも 1+2, 3+4, 5+6という文字が、消去の結果、2+3, 4+5, 6+......とならないようなプロセスが必要になる。

6.4 上記の数例の場合、一つの番号を抜き出しただけでは、先行の数字との組みなのか、後続の番号との組みなのかの判定するプログラムが煩雑なので、0-4の番号は先行し、5-9は後続するというルールを決めて 5X5=25種類の文字を指定するような拡張方法もある。

 ここまでは、0-9までの番号を処理するようにつくられた従来型の基本コンピュータに、できるだけ手を加えないで、既存の資産を残しながら、必要な文字数を拡張するという考え方の拡張である。

 この他に、文字を少数の要素に分解して、それを合成して文字を作る、拡張法もあり、それは後で説明する。いずれにしても色々な拡張する方法があり、現在各国で、それぞれ自分の国の文字の都合にあわせてそれぞれ異なる拡張法が採用されている。このことが、複数の国の文字を、混在させる多言語処理の実現を困難にする原因の一つになっている。

6.5 次の方法は、0-9の10文字の枠を、システムを基本的に改造して、00から99までの100文字対応にする(つまり1と0で表現出来る範囲を拡大する)方法がある。ISO/IEC 10646 (Unicode)はこの考え方で出来ているので、色々な拡張法の混在の問題を軽減(避けるではない)することが可能になっているが、過去の遺産の継承が困難になるという問題点があるので、移行は期待されているようにはなかなか進んでいない。ISO/IEC 10646の実際の文字収容数は 6万5千、約100万、約42億の3種類があり、最初65,000で十分と考えられていたが、これでは不足であることが明らかになって、現在100万への移行が始まっている。

Top

7 文字合成法

 また、10文字の例にもどって、文字を少数の要素に分解して(特に、基本の188に納まるように分解して)多くの文字を表現する方法を説明する。例えば 草冠(=0)と、早(1)・之(2)・化(3)があれば、草(0+1)・芝(0+2)・花(0+3)・早(1)・之(2)・化(3)の6文字が表現出来るというような例であり、漢字でなくとも、ローマ字のアクセントの表現などにも利用できるし、特に東南・南アジア系の音節文字には広く用いられている方法である。この方法は、従来型の固定幅フォントではなく、可変幅フォントも使用できる出力部が一般的になってから、かなり有力視されており、南アジアから、チベット文字、モンゴル文字などこの方法が提案され国家規格が出来ており、国際規格としても提案されているものも少なく無い。

 しかし、この方法にも問題がある、上の例に追加して、火(4)があるとして、花火と書くには、0,3,4で出来るはずである。ここで、花を消去しようとして、まず3を消すと、データは、0,4となり、草冠に火という文字が予想に反して表示される、また3ではなく最初に0を消すと、化火となってしまう。これは使用者にとっては使いにくい。また、0,3,4の代わりに、3,0,4と花火を期待して入力すると、化、草冠に火とまた予想と違ってしまう。つまり書き順の(コンピュータの都合に合わせた)正しさが要求される。あるいは、行末の折り返しの問題が起きるし、木が三個続いた時には、それは、木、木、木なのか、木、林なのか、森なのかを判断する必要が出てくる。問題は、このような時に、花が一度に消えるように、とか、木三回が森かどうかとかとか、草冠に火という文字は無いとかという判断が必要で、その種の特殊なプロセスを、言語毎にそれぞれ独自のものを作って追加しないと実用的なものが出来上がらない。さらにその言語毎にすでに複雑になっているものを複数重ね合わせて、多言語への拡張をすることは、至難のわざになる。(各言語毎にはなんとか対応して国家規格が出来ているが、その先が難しすぎる)。

 現実には、南・東南アジア地域の各国のコンピュータを調査をした結果、このような問題にきちんと対応しているものは(国家規格になっているものも含んで)皆無であった。

 ISO/IEC 10646では、各国規格のこのような特別処理をそれぞれ要求する文字を、そのまま取り込んでいるという問題がまだ残っている。

Top

8 結び

 このように、文字数が190以内の場合で、独立した形状で、一方向に書けば良い時には、どんな言葉でも、現行システムそのままで、データの入れ替えだけが、コンピュータの現地語適応(国際化)に要求され、それ以外は無い。(ほとんどの欧米の言語へ対応可能)

 また、文字数が190では足りない時には、文字の性格にあわせて、色々な拡張方法があり、最適の拡張方法を言語毎に(それぞれ別個に)選ばれているのが現状である。(漢字圏諸国)

 さらに、音節合成型の文字の場合は、手書きの場合のために分解された音節要素をそのまま使用しているので、それぞれ言語毎に異なる特殊な処理が必要なようになっている(南・東南アジア諸国の文字)と、多様な要求が混在している。

 これだけの事実を見ても、国際化は欧米主導では問題が起きやすく、アジア諸国の要求の情報発信の重要性が理解できる。

 しかし、そのどれをとっても、色々な言語を情報機器で扱いたい(国際化したい)という要望に応えるには、それぞれ独自の文字の基本入出力部を持つ必要は無く、単に、現在すでにある、それらの所に収納されている、フォントデータとか、入力データ変換表の差し替えで、入出力部は対応できる。(つまり、どうすれば文字を入出力出来るかは問題では無い)。

 他方、重要なのは、文字数の拡張方法であり、特に合成型を採用した場合(文化的には、南アジアのサンスクリット系の文字文化圏などは必須になる)、どんな要素に切り分けて、どんな合成法を予想し、どんな規則を適用するのか、簡単に言うと、どんな文字コードを使うか? それが情報処理部にどんな処理を期待するか?ということが、国際化の中の文字表現問題として重要事項になる。(できるだけ同じことが要求)

 と言うわけで、国際化の技術の文字の部分の説明には、文字コードの話はあっても、そのの入出力の話は出て来ない。しかも、その文字を現に使用している人達が、納得している文字をそのまま符号化しないこと、つまり現地の現地化したシステムが必ずしも採用されない場合もあり得る、あるいは、各地で、各地の文字の入出力が出来るシステムを見ても、多くの場合、国際化屋がたいした関心を示さない理由が、この辺にある。

Top

追記: 国際化の現在の課題
 文字の入出力が「国際化」の主たる話題で無いとすれば、「国際化」の現在の焦点と目標は何であろうか? これは、別途述べているように、それぞれの現地語でコンピュータが動く、ということでは無い。現在の目標は、世界中で、同じアプリケーション・プログラムを、それぞれの言語でかつ、それぞれの文化を反映して、ほとんど同じ時期に使用可能にするか? であり、そのための、アプリケーション・プログラムの書き方、やそれを可能にする色々な共通機能の仕様策定などが課題である。つまり、現在の「国際化」は、各国文字は準備されているという仮定で、それをどう利用するか?ということ、特に世界的ネットワーク環境下で、ことなる言語を使用しているコンピュータ間で、どう情報を交換するか?に焦点を合わせている。