質問するログイン新規登録

回答編集履歴

1

バイナリデータとバイナリ形式について追記しました

2019/06/25 00:57

投稿

ockeghem
ockeghem

スコア11710

answer CHANGED
@@ -5,4 +5,14 @@
5
5
 
6
6
  かえって混乱させてしまうかもしれませんが、「こ」という文字を「こ」(3バイト)のまま送信するのがバイナリです。そして、HTTPの通常の方式(application/x-www-form-urlencoded)で「こ」を送信すると、パーセントエンコードという形式により、%E3%81%93 という 9バイトになります。バイナリ形式だと3バイトなので、3倍の大きさになるわけです。こちらがテキスト形式です。
7
7
 
8
- 文字かどうかで考えると混乱しそうですね。テキスト形式というのは、「あらゆるデータを限られた(表示可能な)文字で表現できる形式」であり、パーセントエンコードもその形式の一つです。「こ」も表示可能ではあるのですが、パーセントエンコードを使うと、ASCIIという限定された文字だけで全てのデータを表現できます。限られた(表示可能な)文字で表現するための変換を伴うので、バイト数が増える場合があります。バイナリは、「元のままの形で扱う」ということで、バイト数は増えません。
8
+ 文字かどうかで考えると混乱しそうですね。テキスト形式というのは、「あらゆるデータを限られた(表示可能な)文字で表現できる形式」であり、パーセントエンコードもその形式の一つです。「こ」も表示可能ではあるのですが、パーセントエンコードを使うと、ASCIIという限定された文字だけで全てのデータを表現できます。限られた(表示可能な)文字で表現するための変換を伴うので、バイト数が増える場合があります。バイナリは、「元のままの形で扱う」ということで、バイト数は増えません。
9
+
10
+ ---
11
+
12
+ 追記です。
13
+ バイナリデータとバイナリ形式の違い、というのも誤解の原因かもしれません。
14
+ バイナリデータというのは、文字としての表示を前提としていないデータであり、Windowsの.EXE形式のデータや、JPEGやPNGなどの画像形式のデータが例として挙げられます。
15
+ 一方テキスト形式のデータ形式には、JSONやbase64、16進文字列などがあります。base64を例に取ると、UTF-8エンコードの「こ」は、base64エンコードすると 44GT という4バイトのASCII文字列になります。バイナリデータを表示可能な文字だけで表現するために、バイト数が増加する場合があります。
16
+
17
+ HTTPの場合でいうと、データのダウンロードは、通常、テキストデータもバイナリデータも「生の形」でダウンロードされます。バイナリ形式としてダウンロードしていることになります。
18
+ 一方、データをブラウザからサーバーに送る(アップロードする)場合は、通常はパーセントエンコード(URLエンコードとも言う; application/x-www-form-urlencoded )という「テキスト形式」で送りますが、この形式は最大で元のバイト数の3倍になります。ファイルのアップロードに使うmultipart/form-dataは元データをエンコードせず生の形で送信するので、「バイナリのままで」送信することになります。区切りなどは別にすると、multipart/form-data形式はデータのバイト数が増えることはありません。