Home > あいそるニュース > テキストファイルとバイナリファイル
テキストファイルとバイナリファイル
2008-11-14 00:07
「テキストファイル」とか「バイナリファイル」とかいう言葉を聞いたことがあると思いますがそれぞれどういう意味で何が違うのでしょうか。
簡単に言うと、テキストファイルは文字データのみで構成されたファイルで、バイナリファイルは文字以外のデータが含まれているファイルということになります。実際にメモ帳等のテキストエディタで開けばよく分かります。
見分ける方法として、上図の通りテキストエディタで対象のファイルを開き、文字化けしなければそれはテキストファイルで文字化けしたらそれはバイナリファイルと考えてほぼ間違えありません。
バイナリの原義は「2進数の」という意味です。だからバイナリファイルは2進数で構成されているファイルということでなんとなく理解できます。 しかしそれじゃテキストファイルは2進数じゃないのか、という妙な疑問が湧いている方がいるかもしれませんので 今回はこの「テキストファイル」と「バイナリファイル」の違いにこだわって分かりやすく解説したいと思います。
まず、結論から言うとコンピュータに保存される全てのファイルは必ず0か1の2進数で構成されています。それはバイナリファイルだろうとテキストファイルだろうと同じです。 テキストエディタではなく、バイナリエディタと呼ばれるツールでファイルを開けばそれが明確に分かります。
上図はバイナリエディタで開いたテキストファイルとバイナリファイルです。
上記で述べたとおりどちらのファイルも0か1の2進数で構成されていることが分かります。
※上図のバイナリエディタは、2進数ではなく分かりやすく16進数で表示されています。
どちらのファイルも2進数で構成されているのに、テキストファイルとバイナリファイルの違いはなんなのでしょうか?
という事で、もう少し具体的な例を挙げましょう。
「文字コード」という言葉を聞いた事があると思います。
「文字コード」に関して厳密に説明するとまた奥深い話になってしまいますので割愛しますが、
コンピュータで文字を扱う為に文字一つ一つに数値が割り当てられており、それらの一連のルールを「文字コード」言います。
先に述べたようにコンピュータが扱う全てのデータは必ず0か1の2進数で構成される数値ですので、
文字をデータとして保存するにもその一文字一文字を数値で保存しているわけです。
有名な文字コードのASCIIを例にとって説明します。 ASCII文字のコード体系では、半角大文字のアルファベットABCのそれぞれの数値は左下表の通りとなります。16進数で、Aは41、Bは42、Cは43です。 このアルファベットABCを表す16進数の数値を右下図の通り実際にバイナリエディタに入力して保存します。
バイナリエディタで保存したファイルをメモ帳で開くと、右図の通り「ABC」という文字になって表示されます。
つまり実際には数値としてコンピュータに保存されているファイルは、バイナリエディタで開くとそのままですが、
テキストエディタで開くと、人間に分かりやすく文字に変換して表示してくれると言うわけです。
上記の例を踏まえてテキストファイルとバイナリファイルは何が違うのかというと、 テキストファイルもバイナリファイルと同様に2進数で構成されているが、 そのデータが文字を表す数値「だけ」で構成されているもの を特にテキストファイルと呼んでいるのです。
何度も言うようにコンピュータに保存されている全てのデータ(ファイル)はバイナリです。
データに着目して考えると、考え様によってはコンピュータが扱う全てのファイルはバイナリファイルと呼び、
その中でデータが文字を表す数値だけで構成されているものをテキストファイルと呼ぶことが出来るかもしれません。
つまり右図の様に、バイナリファイルはテキストファイルを内包するという関係も考えられるわけです。
FTPを使用したことがある方はご存知かとは思いますが、FTPにはアスキーモードとバイナリモードがあります。
左図の有名なFTPツールのFFFTPにも当然アスキーモードとバイナリモードを変更できる機能があります。 これらのモードの違いを簡単に言うと、テキストファイルを転送する為のモードがアスキーモードで、バイナリファイルを転送する為のモードがバイナリモードとなります。
バイナリファイルは必ずバイナリモードで転送する必要がありますが、テキストファイルは必ずアスキーモードで転送しなければならないかと言えばそうではありません。上図の通り、テキストファイルはバイナリファイルに含まれるからです。
ではどういう時にアスキーモードの転送が役に立つかといいますと、改行コードを自動的に変換してくれるのです。 ご存知の方は多いと思いますが、環境によって改行コードは異なります。例えばLinuxとWindowsでは改行コードは違います。 バイナリモードでアップロードすると改行コードの変換はしてくれませんが、 アスキーモードでテキストファイルを転送した場合は環境に応じて改行コードの変換を自動的にしてくれるのです。 これが場合によっては便利というわけです。
補足
尚、説明の過程として上記の通りバイナリファイルはテキストファイルを内包する、つまりテキストファイルはバイナリファイルの一部と申し上げましたが、この言い方や上記の図は一般的ではありません。 バイナリというデータに着目するとこのように考えることは出来ますが、 一般的にはテキストファイルは文字データだけで構成されたファイルを指し、テキストファイルを除く「それ以外」のファイルをバイナリファイルと呼びますのでご注意ください。
Posted by T.S
