ファイルの保存形式について
コンピュータは、データをディスクなどの記憶装置に「ファイル」という単位として保存します。このファイルには大きく分けて「テキスト形式」のものと「バイナリ形式」のものがあり、一般に「テキスト形式」ファイルはコンピュータの機種を問わずに交換可能ですが、「バイナリ形式」ファイルは機種やソフトウェアに依存し、互換性が低くなります。
テキスト形式ファイル
コンピュータでは多くの場合、情報を文字として画面に表示したり処理したりします。扱う情報が文字だけで表現できる場合は、コンピュータはそれを「テキスト形式」のファイルに保存します。
テキスト形式ファイルは、画面に表示できる文字と改行やタブなどのいくつかの特殊文字だけで構成されます。これらの文字は、基本的にどんなソフトウェアでも、また異なるコンピュータでも理解することができるので、互換性・汎用性の高い保存形式です。利用しているソフトを変更しても、コンピュータの種類を別のものに変えても、テキスト形式で保存した情報はそのまま新しい環境に引き継ぐことが可能です。20年以上前に作成された文書でも、特別な処理なしに今でも完全に読むことができるのが、テキスト形式ファイルのメリットです。
互換性・汎用性に優れている反面、文字だけで構成するテキストファイルは表現力が限られています。電子メールでいろいろな表現をするための工夫をみると、テキストファイルによる表現力のレベルがよく分かると思います。
バイナリ形式ファイル
テキストに限らない幅広い情報を扱う場合は、データは「バイナリ形式」でファイルに保存されます。画像ファイルは典型的ですが、文字を中心に扱うソフトでも、ワープロのように様々な文字装飾やレイアウトなど文字以外の情報を保存しなければならないときは、「バイナリ形式」のファイルを用います。バイナリ形式のファイルに保存するデータには、制約はありません。それぞれ扱う情報に応じて、ソフトウェア(あるいは標準化団体)がファイルに保存する情報のルール(ファイルフォーマット)を定めています。
バイナリ形式ファイルの長所・短所は、ちょうどテキスト形式ファイルの逆になります。多彩な表現の情報を保存・交換することができますが、データ保存のルールが様々なので、ソフトウェアや環境が異なるとファイルの内容を読みとれないことがあります。同じソフトウェアでも、バージョンが変わるとファイルフォーマットを変更する場合があり、Wordで作った文書なのに、古いWordでは読めないという現象がしばしば生じます。
画像ファイルのJPEGのように、標準化団体が定めたファイルフォーマットを用いると、バイナリ形式のファイルでも互換性・汎用性が高まります。また、WordやExcelのように市場支配力の強いソフトのファイルフォーマットは、他のソフトウェアでも読みとれる場合が多いでしょう。しかし、これらも本質的には機種・ソフトウェアに依存することに違いはありません。
マークアップを用いたテキスト形式ファイル
テキスト形式ファイルの互換性・汎用性の高さを保ちつつ情報表現力を高めるための方法が、マークアップによるタグ付けです。一般的な文字のうち特定のもの(たとえば < と > )を「マークアップ記号」と定め、その記号を使ってテキストに付加価値情報を与えていくものです。
マークアップの代表的なものはSGMLという仕組みですが、HTMLはこのSGMLを応用して、機種に依存しない形で表現力のある情報交換を可能にしたものです。
機種による改行コードの違い
このようにテキスト形式ファイルは互換性が高いのですが、機種によって「改行」を表す方法が少し異なるので、場合によっては注意が必要です。
「改行」という働きは、タイプライターでは
- 印字ヘッドを先頭位置に戻す
- 用紙を1行分送る
の2つの動作からなっています。これに対応して、コンピュータの文字セットの制御コードには
- Carriage Return (CR) : ASCII 0x0D
- Line Feed (LF) : ASCII 0x0A
という2つのコードが用意されています。そして、テキストデータの中で「改行」を示すためにどのコードを使うかが、残念ながらコンピュータのシステムによって異なるものとなっているのです。
Windows | CR LF の2つが連続した場合に改行 |
Macintosh | CR 1つで改行 |
UNIX | LF 1つで改行 |
この違いを自動的に吸収してくれるソフトウェアもありますが、自分の機種とは異なる方式の改行コードがくると、正しく動作しないものもあります。HTMLの場合は、どちらの改行が来ても、これを空白文字として扱うことになっているので、機種の違いによる問題は生じませんが、CGIプログラムなどは、そのサーバーの機種に応じた改行コードを用いないと正しく動作しないことがあります。