回答編集履歴
1
バイナリデータとバイナリ形式について追記しました
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形式はデータのバイト数が増えることはありません。
|