まず文字のコードと言っても,文字の形をそのままデータとして扱う訳ではない。 例えば文字列を記憶しておく際,各文字ごとに番号を付け, その番号だけを記憶しておけば記憶容量はうんと減る。 この番号を文字コード(character code)と言う。 出力の際は,その番号ごとに形を対応させればよい。 一般に,文字の形を記憶するには,大きな記憶容量が必要であるので, この対応表はたった一つだけ記憶しておき, ワープロソフトなどのような文字列を切ったり貼ったりしているときには, 番号のような軽いコードで処理する。 これら文字列をディスプレーやプリンタに出力するときだけ, 形の記憶領域を見に行けばよいのである。
文字は表したい総字数によって,コード化するのに必要なビット幅が異なる。 例えば英数字をすべてとなると,数字10文字,英字大小52文字, それとピリオドや%などの記号を加えると64個を少し越える。 64個を2進表現すると6bitであるので,やや余裕を持たせ7bitを使うことにしている。 ちょっと面倒なのは数字である。 数字のコードを,表す数そのものの2進表現にしておけば簡単であったのだが, ほとんどのコード表で,数字は2進表現とは異なるコードになっている。
図 6.14に代表的な文字コードである アスキーコード(ASCII code)を示す。 第0列と1列は主として通信用の制御コードが割り当てられているが, 現在はあまり使われないので,ほとんどを省略した。 LFは改行,CRは復帰,SPは空白,DELは消去を意味する。 0から9までの文字コードが0x30から0x39と, 数そのものの2進表現でないことを確認して欲しい。 さらに,文字の国際化や種々の余裕を持たせるため文字コードのビット幅は 8bitであると言ってもよいだろう。
日本語の文字にはさらにひらがなとカタカナ,さらに数千字の漢字がある。 そこで,まず幅を8bitとして,カタカナ(半角)を収容した時代がある。 漢字も含めようとすると,当然,8bitの幅でも不足である。 そこで,16bitの幅を使い,ひらがな,カタカナ(全角), 漢字のすべてを収容している。 面倒なことに,日本語の文字を収容するには,歴史に依存したいくつかの手法がある。 WindowsやMac系のシステムで使われているシフトJISコード(shift JIS code)と, Unix系のシステムで使われているEUCコード(EUC code)がある。 これ以外にも,日英の切り替わるときに特別なコードを入れ, その間は16bitコードであると認識させるJISコード(JIS code)と呼ばれるものもある。
さらに,国際化が進み, 世界中の代表的なすべての文字に対するコードを作ろうという UTFコード(UTF code)と呼ばれる24bitコードもある。 これらの詳細については,本書の趣旨からずれるため,他書を参考にして欲しい。
文字を1次元的に並べた集合を文字列(character string)あるいはテキスト(text)と呼ぶ。 文字数は短いものもあれば,長いものもある。 いつも同じ長さに収容しようとすると,記憶が無駄になるので, 多くの場合,次に述べる二つの方法のいずれかを利用して, メモリーを有効に利用する。
第一の方法は,文字列の最初に文字列の長さを記載しておく方法である。 しかし,16bit幅の場合,その幅内に書ける最大数は65,536であるので, これ以上の文字列は定義できない。 これ以上の文字列の場合には65,536個の文字列に分解して収容することになる。
第二の方法は,文字列の最後に特別な記号を入れておく方法である。 ASCIIコードを見てみると,表の最初の方は空けてある。 例えば0番を文字列の終端記号として利用する。 これであると,メモリーの許す限りいくらでも長い文字列が収容できる。 ただ,前から順番にチェックしていかないと文字列の終了点がわからない という欠点もあり,いずれが便利なのか一概には言えない。