漢字1文字がUTF-8で3バイト、URLエンコードで9バイト


『Real World HTTP』を読んでいたら、以下のようにあった。

漢字1文字がUTF-8で3バイト、URLエンコードで9バイトなります。(P.23)

よくわからなかったので調べた。

つまり、こういうこと

たとえば、「木」という漢字は、UTF-8ではE69CA8と表される。

これは3バイトになる。

なぜかというと16進数1桁は4ビットで表されるため、E69CA8は6桁であることから、
4ビット * 6桁 / 8ビット で 3バイトになる。

また、なぜ16進数1桁は4ビットで表せるかというと、4ビットは2の4乗(すなわち16通り)の表現が可能だから。

そして、E69CA8をパーセントエンコーディングすると%E6%9C%A8になる。

このとき、1文字は1バイトで表され、%E6%9C%A8は9文字なので、9バイトとなる。

疑問

漢字に限らず、ひらがな・かたかなでも同じく、「UTF-8で3バイト、URLエンコードで9バイト」になるのではないか。

引用元