web-dev-qa-db-ja.com

テキストファイルとバイナリファイルの違い

送信時にテキストファイルとバイナリファイルを区別する必要があるのはなぜですか?テキストデータ専用に設計されたチャネルがあるのはなぜですか?最下位レベルでは、これらはすべてビットです。

38
andrew

最下層では、それらはすべてビットです...真。ただし、一部の伝送チャネルにはバイトあたり7ビットがあり、他の伝送チャネルにはバイトあたり8ビットがあります。 ASCIIテキストを7ビットチャネルで送信する場合、すべて問題ありません。バイナリデータは破損します。

さらに、システムによって行末の規則が異なります。LFとCRLFが一般的ですが、CRまたはNELを使用するシステムもあります。テキスト転送モードでは行末が自動的に変換され、バイナリファイルが破損します。

ただし、これは最近のほとんどすべての歴史的関心事です。ほとんどの伝送チャネルは8ビット(HTTPなど)であり、ほとんどのユーザーは、行末が何であっても問題ありません。

7ビットチャネルのいくつかの例: SMTP(名目上、拡張なし)、SMS、Telnet、いくつかのシリアル接続。インターネットは必ずしもTCP/IPに基づいて構築されているわけではなく、それは示されています。

さらに、HTTP仕様では、

正規形式の場合、「テキスト」タイプのメディアサブタイプはCRLFをテキストの改行として使用します。 HTTPはこの要件を緩和し、プレーンCRまたはLFのみのテキストメディアの転送を許可します。エンティティ本体全体で一貫して行われる場合は改行を表します。

25
Dietrich Epp

すべてのファイルは、バイナリまたはテキストの2つのファイル形式のいずれかで保存されます。 2つのファイルタイプは表面上は同じに見えるかもしれませんが、内部構造は異なります。

バイナリファイルとテキストファイルの両方に一連の(ビット(1と0のバイナリ値))として保存されたデータが含まれていますが、テキストファイルのビットは文字を表し、バイナリファイルのビットはカスタムデータを表します。

8
munendra

OSによってテキストファイルの扱いが異なるため、この2つを区別することが重要です。たとえば、* nixでは\nだけで行を終了しますが、MS OSでは\r\nを使用し、Macでは\n\rを使用します。 FTPクライアントなどのソフトウェアは、文字を追加または削除することにより、宛先OSに一致するようにテキストファイルの行末を変更しようとします。これは、宛先OSでテキストファイルが適切に表示されることを確認するためです。

たとえば、改行付きの* nixでテキストファイルを作成し、それをバイナリファイルとしてWindowsボックスにコピーしてメモ帳で開こうとすると、行末は表示されず、テキストの詰まりだけが表示されます。 。

6
Rasika

テキストファイルとバイナリファイルはどちらもバイトを表しますが、テキストファイルはバイナリファイルとは異なり、バイトは文字を表すと理解されています。バイトから文字へのマッピングは、特定のコードページまたはUnicodeを使用してファイル全体で一貫して行われます。 7ビットまたは8ビットのコードページを使用する場合、これらのファイルを読み取るときにダイヤルを回転して、英語のアルファベット、ドイツ語のアルファベット、ロシア語のアルファベットなどで解釈できます。このダイヤルの回転はバイトに影響を与えません。バイトに対応するために選択される文字に影響します。

他の人が述べたように、テキストファイルに固有であり、プラットフォームごとに異なる可能性がある改行区切り文字のエンコードの問題もあります。 「改行」は、アルファベットの文字やユーザーが記述できる記号ではないため、他のルールが適用されます。

バイナリファイルでは、文字エンコーディングや「行」の定義に関する暗黙の規則はありません。

2
Mishax