文字コードとテキストデータのサイズ
デジタル化された「データ」は、一般的に「ファイル」として保存されます。ここでは、「文字のデータ(テキストデータと呼びます)」について、データの「サイズ(容量)」がどうなっているのか?についてみていきます。
文字コード
文字(および記号)は、コンピュータ内部では数値と同様に 0 および 1の2進法で表されています。その2進法で表された数値と文字との対応関係を規定するものを「文字コード」と呼びます。
「文字コード」には以下のように、いくつかの種類があります。
・ASCII(アスキー)コード:1963年にアメリカで制定された最も基本的な文字コード。英数字および記号を表現できる。
→このコードでは、日本語が表示できないため以下のコードが開発されます。
・Shift_JIS(シフトジス)コード:1982年に日本語を表現できる文字コードとして開発された。
・ECUコード:1985年にUNIXというOSで使われる日本語用文字コードとして開発された。
→上記2つのコードには互換性がないため、「文字化け」の問題が発生します。これは他の国の言語でも同様です。
よって国や地域別に作られていた文字コードをまとめて多国籍に対応した、国際的な統一文字コードが作られます。
・Unicode(ユニコード):1993年に開発された世界統一の文字コードの総称で、代表的なコードは「UTF-8」。
以上が「文字コード」の種類と歴史です。
コンピュータで扱われるサイズ
コンピュータで扱われるサイズについて確認していきます。
1ビット(bit):0 or 1 の 2通りの情報を表現できます。
1バイト(byte)= 8ビット :2 の 8乗通り(256)の情報を表現できます。
以上を基本単位として、サイズが1024倍されるごとに、キロバイト、メガバイト、ギガバイトとなっていきます。
普通の数値であれば、1000(10の3乗)倍されるごとにその接頭語(キロ、メガ、ギガなど)が使われますが、コンピュータは2進数のため1000に近い 2の10乗 ごとになります。
1バイト x 1024 = 1キロバイト
1キロバイト x 1024 = 1メガバイト
1メガバイト x 1024 = 1ギガバイト という感じですね。
文字のデータサイズ
それでは、実際に文字はどれくらいのデータサイズになるのかをみていきます。
まず、「ASCII コード」について、このコードは先に述べたように、英数字および記号を表現できます。
アルファベットは26文字です。これに、大文字・小文字の2種類があるので 26(文字)× 2 = 52(文字)となります(平仮名、片仮名、漢字を使用する日本語と比較してとても少ないですね)。その52(文字)に数字や記号(+などの演算子や $ などの記号)を含めても、128(文字)を表現できれば十分となります。
よって、「ASCII コード」では、7ビット = 2の7乗 = 128 を1文字に割り当てることになります。
実例を示すと、「A」 は「1000001」、「a」は「1100001」 となります。よって、「ASCII コード」における1文字のサイズは 7ビット となります。
また、「ASCII コード」だけに限りませんが、「空白」や「制御文字」も文字コードで指定されていることに注意が必要です。
「空白」すなわち「スペース」もきちんと指定しなくては、表現できませんよね。「ASCII コード」における「空白」は「0100000」が割り当てられています。また「制御文字」とは「改行」などの文字ではないが、文字の体裁を整えるために必要なものです。その「改行」は同様に「0001010」となります。
続いて、日本語を扱う文字コードの中から「Shift_JIS コード」についてみていきます。
日本語については、常用漢字だけでも2136文字があります。よって 128通りの表現ができる7ビットではとても足りません。ですので、「Shift_JIS コード」は 65536を表現できる、16ビット(2の16乗)= 2バイトの文字コードとなっています。ですので、テキストデータを日本語にすると、文字数が同じであれば、英語の場合よりもデータサイズが大きくなりますね。
ちなみに、このように 2バイトで表現される文字を「ダブルバイト文字」、アスキーコードのように1バイト(以下で)表現される文字を「シングルバイト文字」と呼びます。
「Shift_JIS コード」についても、より正確に言えば、「アイウエオ」のような全角文字が「ダブルバイト文字」であり、「アイウエオ」のような半角文字は「シングルバイト文字」で指定されています。ですので、「Shift_JIS コード」を使用している場合でも全角文字と半角文字ではデータサイズが2倍違うことになります。