今回のテーマは、テキストファイルとバイナリファイルです。 いきなり難しそうな言葉ですが、意味は知らないけど聞いたことはある、という人も多いのではないでしょうか。
ファイルには2種類しかない
パソコンで扱うファイルには色々な種類があるように思われますが、実は大きく分けると2種類しかありません。すなわち、テキストファイルとバイナリファイルです。
■ テキストファイルとは、 文字を表すデータ、つまり、文字コード表に載っているデータだけが書かれているファイル。
■ バイナリファイルとは、 それ以外のファイルすべて。
では、以下に少し詳しく説明していきましょう。
文字コード表に載っているデータ?
文字コードという言葉は聞いたことがある人も多いと思います。
コンピュータは0と1の組み合わせでしか情報を表現できないので、「文字」の情報を扱うためには、「どんなデータ(0と1の組み合わせ)がどんな文字を表すか」というルールを決めておく必要があります。そのルールを文字コードと呼び、文字コードを見やすいように表形式にしたものを文字コード表と呼びます。
百聞は一見に如かず。文字コード表の例を見てみましょう。こちらのサイトに見やすい表がありました。これが文字コード表です。
例としてカタカナの「ア」の部分を切り出してみました。これを見ると、「ア」は「83」の行の「41」の列にありますね。つまり、この文字コードでは、8341というデータが「ア」という意味ですよ、ということです。
ちなみに、8341というのは0と1の長い列を短く表記するために16進数に直したものです。16進数の8341を2進数(0と1で表す数値)に直すと、1000001101000001になります。長いですね。
文字コードには様々な種類があり、日本語の文字が使える文字コードだけでも、JIS、Shift-JIS、EUC、UTF-16、UTF-8などがあります。上記の表はShift-JISのコード表です。
文字化けの原理
ちょっと脱線しますが、「文字化け」という現象は、文字コードによってデータと文字の対応が異なることによって発生します。例えば、Shift-JISのルールに従って書かれたデータをEUCのルールで文字に変換しようとすると、全く別の文字に変換されてしまったり、データに対応する文字が定義されていなくて表示されなかったりするというわけです。
バイナリファイル=テキストファイル以外のすべて
バイナリは英語で書くと binary で、「2進数」という意味です。バイナリファイルとは、テキストファイルではないファイルの総称です。画像ファイルや音楽ファイルなど、簡単に言ってしまうとメモ帳で開けないファイルはすべてバイナリファイルです。
バイナリファイルには、文字コードのルールを完全に無視したデータが書かれているので、メモ帳などのテキストエディタで開こうとしても「どの文字コードを当てはめてみてもちゃんと読めない!」ということになってまともに開けません。
バイナリファイルは人間ではなくソフトウェアが読んだり加工したりするために作られたファイルなので、そもそも文字に変換することなど想定されていないわけです。
まとめ
「ア」と書かれたテキストファイルも、実はファイルに書かれているデータは「ア」ではなく「1000001101000001」というビット列だということが分かりました。
そして、文字コードのルールを無視して書かれているファイルのことをバイナリファイルと呼び、その中身は文字に変換することを想定していないデータ(0と1からなるビット列)だということも分かりました。
つまり、テキストファイルもバイナリファイルも、中身のデータは「何かしら意味のある0/1の羅列」という点ではまったく同じなのです。 ただ、「人間が文字に直して読むためのファイル」なのか、「専用のソフトウェアがデータのまま読むためのファイル」なのかの違いだけです。
これさえ分かっていれば、文字化けしてしまうテキストファイルも、開き方が分からないバイナリファイルも怖くありません。ただ、そのファイルを開く方法を間違えているだけなのです。テキストファイルなら文字コードを変えてみたり、バイナリファイルならそれを開くためのソフトウェアを探してみたりすれば必ず解決できます。