
「テキストとバイナリ」データの内部表現の話
今日昼間、書くと宣言した以上は書かなきゃならない?そんなことはないと思いますがToDoを少しでも減らすために書いておきます。
スマホでもパソコンでも、何でもそうなのですが今日ではアプリケーションを通してデータを扱うことが殆どかと思います。その中で、今日はそういったデータの「内部表現」としてのテキストとバイナリについて簡単に書いてみようと思います。
Office文書の中身を覗いてみる

ここに一つのエクセルのファイルがあります。私が以前、写真展示のレイアウトに用いたファイルです。通常はExcelで開きますが、今日は「メモ帳」というテキスト用のアプリケーションで無理矢理開いてみます。すると以下のようになります。

エクセルで開けば読めますが、メモ帳で開くと解読不能な文字や記号の羅列になります。このような、直接読めないファイルのことを「バイナリファイル」と呼びます。
ところが、実はこのエクセルファイル、バイナリではなく「テキスト」で内容の解読はともかく人間が読める形式で開くことが可能です。具体的な方法は、ファイルの拡張子(xlsx)を「zip」に変更して、Windowsの「展開」という機能を使って展開します。すると沢山のフォルダの中にエクセルシートのファイルもあるので、それをメモ帳で開いてみると、

このような感じで、中身の意味はわかりませんがとりあえず可読可能な形式で開くことができました。こうした、テキスト専用のアプリケーションで開いた時に、文字を文字として人間の目で読める形式のファイルのことを「テキストファイル」と言います。
ファイルには二種類しかない
コンピューターはデジタルで動作しますので、直接解釈できるのは0と1で表現される2進数のみとなります。従ってコンピューター上で扱われるデータやファイルは、全て2進数の羅列になっています。
ただし、それでは不便なことも多いので、ある桁数の2進数ごとにまとまりを作り、そのまとまりに文字を割り当てたもので人が解読しやすい形で記述されたものが「テキスト」になります。まとまりのことを「文字コード」と言います。テキスト以外はすべて「バイナリ」になります。
コンピューターの利用シーンで考えると、バイナリ(画像、動画など)を表示するには、それを解釈できる専用のアプリケーションが必要になります。一方、テキストは、文字コードを解釈できるアプリケーションであれば、どんなものでも表示することが可能です。
エクセルファイルの種明かし
先程のエクセル文書の場合、バイナリなのにテキストでも読める、となっていて不思議ですが、種明かしをここに書いておきます。エクセルなどのオフィス文書は、最近は「XML」という規格に従って書かれたテキストファイルを含む複数のファイルを、「ZIP」という形式で圧縮して一つのファイルにまとめています。なので、ZIPを展開(解凍)すれば内容についてはどうにかエクセルなしでも閲覧できる、というわけです。
このようになったのは、Microsoft Officeの場合は比較的最近の話(といっても10年くらいと思いますが)で、以前のオフィス文書はすべて完全な「バイナリファイル」で、専用の対応アプリケーションでなければ内容の解読は不可能でした。
テキストエディタ
先程紹介した、「メモ帳」のようにテキストのみを編集するアプリケーションのことを「テキストエディタ」と呼び、大抵の場合パソコンに標準でインストールされています。最初からインストールされているもの以外でも、もっと高機能・多機能なものをインターネットから入手することができます。
テキストエディタは、様々なシーンで利用されます。利用シーンとしては、ライターや小説家のような文章を書く専門家が文章を書くのに用いたり、プログラマがプログラムの元となる「ソースコード」を記述するのに用いたりします。あるいは、システム管理者が動作中のシステムの設定を変更するために、設定ファイルをテキストで編集する、といった場合にも多用されます。ホームページの記述も、やろうと思えばテキストエディタで出来ます。
一方、専用のアプリケーションではないけれども、バイナリファイルをテキストのように編集するエディタも存在します。そうしたもののことを「バイナリエディタ」と呼びます。
ネットワークとテキストとバイナリの関係
実は、メールやウェブは、元々はテキストのデータしか扱うことが出来ませんでした。というよりも、日頃利用する殆どのアプリケーションのプロトコル(通信規格)では、バイナリを直接扱える方が珍しいといって過言ではありません。従ってこうしたアプリケーションでバイナリファイルを通信で送受信する場合には様々な工夫が取られています。
その工夫の一つとして、バイナリファイルをテキストのみで表現する、という方法があります。このようなバイナリからテキストへの変換のことを一般に「エンコード/デコード」と言います(変換がエンコード、復号がデコード)。
エンコード/デコードには様々な方法があります。例えば、メールで画像を添付する場合などで一般的に用いられる「Base64」という方法があります。
Base64の詳細について触れるのは本稿の目的ではありませんので割愛します。興味ある方はぜひお調べになってください。Base64を実際に試してみたい方は、以下にフォームがあるので実験することができます。


この例の場合、元々が文字列ですが、画像なども同じ原理で変換されます。変換されると、変換結果のようにASCII(英数字)のみで表現された別の文字列に置き換わることがわかると思います。こうすることで、ウェブ(HTTP)やメール(SMTP)といった元々バイナリ非対応のアプリケーションで安心してバイナリデータを送受信できるわけです。
まとめ
長くなってきたので一旦ここでまとめます。
ファイルには二種類しかない。「テキスト」と「バイナリ」。
テキストは人間が読みやすいもの、バイナリは解読不可能。
テキストは、テキストエディタで編集する。
ネットワークで、バイナリ(画像など)を送受信する場合は、大抵の場合テキスト形式に「変換(エンコード)」されている。
以上です。お付き合いいただきありがとうございました。お粗末でした。