キャラクタ (コンピュータ)
キャラクタ (character) は、文字のことであるが、情報処理においては「文字コード」で表される「文字集合」という集合の要素(「元」)のことである。
概要
コンピュータの情報交換においてテキストデータをやりとりする場合は、双方がそれに使用する文字集合を決めて通信を行うわけであるが、キャラクタはその場合の最小単位である。
キャラクタは大きく分けて図形文字(グラフィックキャラクタ)と制御文字(コントロールキャラクタ)がある。図形文字が実際に画面に表示される文字であり、制御文字はその表示の仕方を制御する改行記号などや、それにとどまらずビープ音を発生させるもの(規格で「ベル」と言っているのは昔の端末用機械に物理的にベルが備わっていたため。実装としては画面を明滅させたりするものもある)などを含む。
図形文字には、言語学的な意味での文字記号(字母)以外に、約物類を含む。さらに、1つのキャラクタが1つの字母を表すとは限らない。文字コードにもよるが、「㍍」のような組文字のキャラクタは複数の字母からなり、逆に、「Å」のようなアクサン付きアルファベットなどは複数のキャラクタで表されることもある。
キャラクタとバイト
キャラクタの符号化(文字符号化方式)に、バイト(この段落ではオクテットと同義)を当てるという標準を確立し広く普及したのはIBMが1964年4月に発表したメインフレームのSystem/360による(それ以前については#歴史の節を参照)。この時当初のアナウンスでは制定されたばかりであったASCIIが採用されるはずであったが、結果的には過去のしがらみを振り切ることができず、メインフレーム用として普及したのはEBCDICであった(一応System/360はモードを切り替えることはできる)。メモリがバイト単位でアドレス付けされている(バイトアドレッシング)コンピュータをバイトマシンと言う。
C言語での型名がcharのため、charすなわちバイトやオクテットと考える者もいるが間違いである。C言語のchar型の幅は<limits.h>をインクルードすることで定義されるCHAR_BITS
というマクロで示されるが、8ではなく9や16かもしれない(最低限必要とされている値の範囲の関係で8未満にはならない。sizeof(char)
は常に1である)。幅を明示した型としてはC99で追加されたint8_t/uint8_tがある。バイトは8ビットではないかもしれない、すなわちオクテットではないかもしれないし、Javaのcharは16ビットである。
コンピュータの普及が米国に次いで早かった日本では、日常の生活や業務に漢字が必須であるため、256より多くのキャラクタを扱いたいという要求が強く、そこで現れたのがマルチバイト文字(MBC)で、1つのキャラクタを複数のバイトで表すものである。特に初期には2バイトを使うものがほとんどであり、ダブルバイト文字(DBC)と言った。
また、米国以外の国や地域で、それぞれに必要な文字を追加した文字集合や文字コードを作ったため、多数の文字集合や文字コードが乱立する結果となった。Unicodeはそれをなんとかするために生まれたものである。
現在ではキャラクタとデータの関係は抽象化されている。キャラクタは整数値(通常非負整数)で表現され、その整数値から文字符号化方式によりバイト列が生成される。たとえばUnicodeではUnicodeスカラ値という値が、各キャラクタに付けられている。
歴史
初期のコンピュータ
初期(1940年代~1960年代前半)のコンピュータにおける「キャラクタ」について述べる。
初期のコンピュータでは、入出力媒体として、コンピュータ以前から存在していた情報処理機械であるタビュレーティングマシン用のパンチカードや、テレタイプ電信網(テレックス)用の紙テープが使用されていた。そのため、それらにおける1カラム、ないし1列の5ビット~7ビットのコードが1文字(1字)であった。
また、System/360より前のコンピュータは、使用する分野ごとに設計が違うのが通常で、主に科学技術計算用と事務処理用に分かれていた。それぞれの典型的な設計を示すと、科学技術計算用は40ビット前後のワード長で、ワードアドレッシングで、ワード単位の演算を得意とするワードマシンであった。これに対し、事務処理用は字(前述の紙テープなどの1文字)単位のアドレッシング、ないし4字ないし6字を1ワードとしたワードアドレッシングで、字単位の処理を得意とするキャラクタマシンであった。
System/360により、バイトマシンが標準となった。
キャラクタディスプレイ
通常のラスタースキャン方式のディスプレイでは、表示する際に、ピクセル毎にその輝度を決定する必要がある。RAMが高価だった時代、コンピュータで使用したのは主にコマンドラインインターフェースであり、文字情報しか表示しないものにディスプレイ全面のピクセルに対応するRAM(VRAM)を用意するのはコストが合わなかった。そのため、ある一定の大きさ(8*8など)のドットマトリクスごとに1バイトの記憶領域を割り当てて、VRAMの容量を節約するキャラクタディスプレイが一般的であった。また、それに合わせたディスプレイコントローラーが使用された。現在のPC/AT互換機のチップセットにもこのような表示用の機能が残っており、BIOS画面等で使用しているものもある。日本製パーソナルコンピュータの黎明期にも多くの機種はテキストVRAMとしてキャラクタディスプレイが行われていた。多くは8x8ドットの英数字と、トランプのカードや、曜日などが機種によって定義された。
X1turbo、MZ-2500は8ビット機ながら漢字キャラクタを本体に持っており、PC-9801シリーズにもこれらの機構は装備されている。漢字もキャラクタとして、高速に漢字が扱えることがPC-9801シリーズが日本で普及した一因といわれている。
各キャラクタを組み合わせて絵を書くことをアスキーアートと呼ぶことがある。
また、キャラクタごとにカラーを割り付ける機能や、その機能で書いた絵をキャラクターグラフィックと呼んだ。 MZ-700にはグラフィック用のVRAMはないものの、テキスト、背景の色をキャラクタ単位で指定できるため、これらを応用し、チェッカを用いたディザリングをはじめとする方法によって描画する試みもあった。 解像度は低い反面、非力なCPUでもダイナミックな描画を実現できるというメリットもあった。
PCG
キャラクタのパターンをROMではなくRAMに保存して書き換え可能にした機能をPCG(Programmable Character Generator:プログラマブル・キャラクタ・ジェネレータ)と称したメーカーもあった。ファミコン等におけるタイリング背景もこれに相当する。定義できる物は単色から、8色まで様々である。
PCGはキャラクタ単位で管理されるため、定義されたデータを変更した場合、テキストVRAMに定義された表示されるキャラクタに反映されるため、点在する物を同時に書き換えることも可能である。これらを利用し、別パターンを定義することによって、擬似的にスクロールをおこなったり、波や、星、水、川の流れ、を表現したり、画面のワイプ処理などに利用する事が可能である。
また、X1のグラフィックVRAMの並びもこれに近く、MZ-1500に至っては、画面全体にキャラクタを並べ、パーツの書き換えによってグラフィック描画を実現している。
フォントROMを使用した、ハードウェアによる文字表示を行っている表示系で、外字機能のために、一部の領域(たとえばPC-9801のある世代以降ではJISの86区と87区に相当する部分)が書き換え可能なRAMになっているものがあった。これも一種のPCGと言える。PC-9801では、文字を、グラフィックの上にスーパーインポーズのようにして表示できたため、ゲームなどでこれを使用しているものがあった。
スプライト
文字(当記事における意味)に由来するのか、それともゲーム等のキャラクターに由来するのかは定かではないが、スプライト技術やタイリング背景に使うタイルなどを指してキャラクタと言う。テンプレート:Asboxテンプレート:Grammatology-stub