コンピュータにおけるキャラクタ:文字コードからディスプレイ表示まで
コンピュータの世界において、「キャラクタ」とは
文字を意味しますが、その定義は単純な
文字記号にとどまりません。情報処理の文脈では、
文字コードによって表現される
文字集合の要素、つまり個々の
文字を指します。テキストデータのやり取りにおいて、送受信双方で使用する
文字集合を事前に合意することで円滑な
通信が可能となります。この最小単位が、キャラクタです。
キャラクタの種類と属性
キャラクタは大きく分けて、図形
文字(グラフィックキャラクタ)と制御
文字(コントロールキャラクタ)の2種類に分類されます。図形
文字は、画面に実際に表示される
文字そのものであり、アルファベット、数字、
漢字、記号などが含まれます。一方、制御
文字は
文字の表示方法を制御する役割を担います。
改行コードやタブコードといった、レイアウトを調整する制御
文字に加え、ビープ音の発生など、表示以外の動作を指示する制御
文字も存在します。
図形
文字には、
言語学的な
文字記号(字母)だけでなく、句読点などの
約物も含まれます。さらに、1つのキャラクタが必ずしも1つの字母に対応するとは限りません。例えば、「㍍」のような組
文字は複数の字母から成り、逆に「Å」のような
ダイアクリティカルマーク付きアルファベットは複数のキャラクタで表現される場合があります。これは使用される
文字コードに依存します。
キャラクタとバイトの関係
キャラクタをバイト(オクテット)で表現するという標準化は、1964年4月にIBMが発表したSystem/360
メインフレームによって広く普及しました。当初は
ASCIIが採用される予定でしたが、実際には
EBCDICが主流となりました。System/360はモードの切り替えが可能でしたが、過去のシステムとの互換性を維持する必要性があったことが背景にあります。
プログラミング言語C/
C++において、
文字型は`char`で表現されますが、`char`が必ずしもバイトやオクテットと等価とは限りません。`char`型のビット数は、`
`または``で定義される`CHAR_BITS`マクロで確認でき、8ビットとは限らず、9ビットや16ビットの可能性もあります。ただし、最小値は8ビット未満にはなりません。`sizeof(char)`は常に1となります。
C99/C++11では、ビット幅を指定した整数型`int8_t`/`uint8_t`と`std::int8_t`/`std::uint8_t`が導入されました。C++20では、UTF-8エンコードされた文字を想定した符号なし文字型`char8_t`が追加されましたが、これも8ビット幅とは限りません。JavaやC#の`char`は16ビットで、UTF-16内部表現が規定されています。
日本語のような漢字を使用する地域では、1つのキャラクタを複数のバイトで表現するマルチバイト文字(MBC)が不可欠でした。特に初期には2バイト文字(DBC)が広く利用されました。各国で独自の文字集合や文字コードが開発された結果、文字コードの乱立という問題が発生し、Unicodeはその問題を解決するために開発されました。現在では、キャラクタは整数値で表現され、文字符号化方式によってバイト列に変換されます。Unicodeでは、各キャラクタにUnicodeスカラ値が割り当てられています。
初期のコンピュータ(1940年代〜1960年代前半)では、パンチカードや紙テープが主要な入出力媒体でした。そのため、1カラムまたは1列の5〜7ビットコードが1文字として扱われていました。System/360以前のコンピュータは、科学技術計算用と事務処理用で設計が大きく異なり、前者はワードマシン、後者はキャラクタマシンとして設計されていました。System/360によって、バイトマシンが標準となりました。
キャラクタディスプレイとグラフィック表現
初期のコンピュータディスプレイは、コスト削減のため、キャラクタディスプレイが一般的でした。一定サイズのドットマトリクス(例えば8×8ピクセル)ごとに1バイトの記憶領域を割り当て、VRAMの容量を節約していました。文字表示だけでなく、アトリビュート領域を使って色や背景色などを指定し、セミグラフィックスやアスキーアートによる表現も行われました。日本のパソコン黎明期においても、キャラクタジェネレータROMを用いた同様の仕組みが用いられていました。漢字表示には、漢字ROMの併用や、ハードウェア拡張によるテキストプレーンの追加などが行われました。PC-9801シリーズのように、漢字をキャラクタとして扱うことで高速な表示を実現した例もあります。
プログラマブル・キャラクタ・ジェネレータ(PCG)
キャラクタパターンをROMではなくRAMに保存し、書き換え可能な機能をPCG(Programmable Character Generator)と呼びます。アーケードゲーム基板や家庭用ゲーム機でも同様の仕組みが用いられており、タイリング背景など、繰り返し表示される画像の生成に利用されました。PCGを用いることで、スムーススクロール、多重スクロール、波や水の流れなどの表現が可能になります。MSXやMZ-1500などでは、テキスト画面を拡張する形でグラフィックス表示にも利用されました。
スプライトとパターン
2Dゲームにおいて、キャラクター表示に用いられるスプライトや、背景表示に用いられるタイル状の画像も、キャラクタやパターンと呼ばれる場合があります。アニメーションする一連の画像は「アニメーションパターン」と呼ばれ、「爆発パターン」や「やられパターン」などとも呼ばれます。
これらの技術は、コンピュータにおける文字処理の歴史と発展を物語り、現代の高度なグラフィック表示技術へと繋がっています。