回答編集履歴

1

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

2019/06/25 00:57

投稿

ockeghem
ockeghem

スコア11701

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