がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

バイナリ(ファイル)とテキスト(ファイル)の違いはなに?

んと。この手の議論をする時はまず定義から入るのですが。
ストレートに一言「テキスト(ファイル)の定義は曖昧」です。


一般的に。「画面上に出力可能な文字と改行、制御文字だけで構成されていたら」テキストで、それ以外を含むならバイナリ、とかいうふうに言われています。
で、そのあたりを前提に、例えば「メモ帳で書き込んで保存したものはテキスト」だし「画像ファイルとか実行ファイル(.exe)はバイナリファイル」とされてますが。


んじゃ質問。
日本語(shift-jis)でメモ帳で書き書きしたデータ。ある画面上では「文字化けして出力不可能」です。んじゃそれはバイナリファイル?
昔は本当にあったのですが(今あるかはしらにゃい)。たまたま偶然「半角カナ文字だけで構成された」実行ファイルがあります(何かの変換が出来たような…)。当然半角カナ文字だけですから、画面出力可能です。んじゃこの実行ファイルはテキスト?


つまり。そもそも「画面上に出力可能」とかいう曖昧でアバウトな基準しかないために、テキスト(ファイル)というのは事実上「未定義」と大差ないわけです。
以上fin……で終わると切ないので、もうちょいとだけ。


元々上述の世界観ではあったのですが、最近色々と事情が変わってきています。親切設計とか余計なお世話設計とかげふんごふんがふん。


いち。環境によって改行コードが異なる、ってのは技術者的には常識レベルだと思われるのですが多分。
例えば。Windows系ですと改行コードはCRLFです。でも例えばUNIXはLFです。なので。「テキストファイルとして開いた中身にLF(0x0a)がある時はCRLF(0x0d0a)に変換する」なんて親切設計が存在します(そのまぁ邪魔くさいことといったら以下略)。
例えば。MySQLで「テキスト」だとすると、いきなり「大文字と小文字は==でtrueを返す」なんて奇天烈(技術者として素直に飲める発想だとはあまり思えないです正直)な挙動を行います。


というわけで。
本質的に「テキストファイル」とか言われると「えと…定義は?」とか聞きたくなるです。
でもまぁ、改行コードはともかくとして、それ以外はいわゆるASCIIの図形文字で表されていれば、多分それはテキストであるといってもまぁよいのではなかろうかと思わなくもないわけです多分あるいは。


ちと別所で「テキストとバイナリの違い」とかいう話がでたので、せっかくなので、メモ。