2009-09-16 28 views
10

多くの言語はバイナリではなく "プレーンテキスト"のみを処理する関数を持っています。これは、ASCII範囲内の文字のみが許可されることを意味しますか?平文データとバイナリデータの違いは何ですか?

バイナリは単なる一連のバイトです。文字列として解釈される一連のバイトであるプレーンテキストと似ていませんか?ですから、プレーンテキストはバイナリと同じデータフォーマット/プロトコルを格納できますか?

+4

参考のため、平文のようなものはありません。 http://www.joelonsoftware.com/articles/Unicode.html – harpo

+0

FYI、この文脈の平文はUTF-8ではなく、前にも述べたように、それは一連のバイトであり、何の意味もないので、Unicodeを表すことはできません。 –

+0

私はちょっと怖かったと思います。結局のところ、あなたは "平文"の周りに航空引用符を含めました。 – harpo

答えて

3

一つで、それ以上を考えることができないかもしれませんそれはしばしば、言語が、論理行終端文字として値10または13などのcertian制御文字を自由に解釈できるように感じるかもしれないということです。言い換えれば、出力操作はこれらの文字を自動的に最後に付加し、入力操作はそれらを入力から取り除く(および/またはそこでの読み込みを終了する)かもしれない。これに対して、「バイナリ」データで動作することを宣言する言語I/O操作には、通常、データの長さの入力パラメータが含まれています。これは、他の方法がないためです(過去のファイルの最後の読み込みが不足しているため)それがいつ行われたかを知る。

+0

私が平文を供給している関数が文字列であるとします。制御文字に頼るのではなく、送信前の長さを測定することはできますか? –

+2

言語によって異なります。アダイでは、certianly。 Cでは、これを行う唯一の方法は行終了記号(ASCII 0)を探すことです。つまり、 "ASCII" I/Oルーチンを使用してその値をファイルに出力することはできませんが、長さベースの "バイナリ"ルーチンを使用することができます。 –

+0

もちろん、制御文字(\ r \ nなど)を追加したり、その文字列に文字セット変換を加えたりすることもできます。データがバイナリとして扱われる場合は、何も追加または変更されません。 – nos

6

プレーンテキストは人間が読める形式であるため、通常、人間が読むことができないバイナリファイルは、印刷可能な文字と印刷できない文字で構成されているためです。

テキストエディタ(メモ帳やvimなど)でjpegファイルを開こうとすると、何を意味するのかわかります。

通常、バイナリファイルは、解析が不要なため、速度を最適化する方法で構築されます。 プレーンテキストファイルは手作業で編集可能ですが、バイナリファイルでは編集できません。

+10

Jon Skeetはバイナリファイルを読み取ることができます。 –

+0

私はこれがChuck Norris風のJon Skeetジョークの夜明けであることを願っています。 – JMP

+0

Chuck Norrisは、バイナリファイルをプラッタからすぐに読み取ることができます。 – fbrereto

4

"プレーンテキスト"にはいくつかの意味があります。

この文脈で最も有用なのは、特定のコンピュータシステムが「テキスト」文字とみなすものの有限集合に変換できるバイトシーケンスで編成された単なるバイナリファイルであることです。

第2の意味は、多少は関係しているが、システムがこれらの「テキスト文字」を認識可能なアルファベットのメンバーとして人間が読むことのできる記号として表示するという制限である。多くの場合、書かれていない意味は、翻訳メカニズムがASCIIであることです。

第3のさらに制限的な意味は、このシステムは「シンプルな」テキストエディタ/ビューアでなければならないということです。通常ASCIIエンコーディングを意味します。しかし、実際には、あなた、人間、ASCIIコード化されたファイルを読むVIテキストエディタに対して、プロプライエタリなプログラムで表示された、いくつかのファンキーなフォーマットでエンコードされたテキストを読む人の間には、ほとんど違いはありません。

プログラミングコンテキストでは、プログラミング環境(OS +システムAPIと言語機能を合わせたもの)は、「テキスト」文字セットと、これらの「文字」文字セットに変換するために読むことができるエンコードセットの両方を定義します。テキスト "文字。これは、必ずしもASCII、英語、または8ビットを意味するわけではないことに注意してください。たとえば、Perlはネイティブで "Unicode"の完全な文字セットを読み込んで使用できます。

特定の質問に答えるには、文字列を使用して任意のバイトシーケンスを送信することができます。ただし、文字列の終了規則を適用する必要があります。 問題は、「文字データを処理する」ために既に存在する関数は、バイナリデータを処理するための有用な機能を持っていない可能性があるということです。

3

一般に、言語/環境/機能によって異なります。

バイナリデータは常にバイナリです。変更なしで転送されます。

「プレーンテキスト」モードでは、次のものの1つまたは複数を意味し得る:

  • バイトのストリームが行に分割されます。行区切り文字は\ r、\ n、\ r \ n、または\ n \ rです。ときにはOSに依存します(* nixは\ n、windowsは\ n \ nが好きです)。読み取り終了時に行末を調整することができます。
  • 文字エンコーディングを調整することができます。環境が検出および/またはアプリケーションは、おそらくいくつかの他の変換は、このリストに追加する必要があります
  • を見込んでのエンコードにソースのエンコーディングを変換するが、私はこの瞬間
2

技術的には何もありません。プレーンテキストはバイナリデータの一種です。しかし、大きな違いは、値の格納方法です。整数がどのように格納されるかを考えてください。バイナリデータでは、おそらく32ビットの空間をとる2の補数形式を使用します。テキスト形式では、代わりに一連のユニコード数字として数字が格納されます。したがって、数値50はバイナリで0x32(32ビットを占有するようにパディング)に格納されますが、プレーンテキストでは '5' '0'として格納されます。

関連する問題