URLエンコードについて

URLエンコードについてちょっと調べたのでまとめておく。
まず、URLエンコードが何かというと。

パーセントエンコーディング - Wikipedia

URLエンコード(ゆーあーるえるえんこーど)とはURIに2バイト文字を使う際に行われる符号化のことである。

URIの規則を定める RFC 2396 では、URIにASCII以外の文字を入れる場合、「%xx」(xxは16進数)という形でコードを表記することが定められている。

ポイントは、「%xx」(16進数)という形で表すこと。


次に、実際に2バイト文字をURLエンコードするとどうなるのか見てみる。
例えば、「エンコード」という文字列をエンコードしてみると以下のようになる。

文字コード エンコード結果
EUC-JP %A5%A8%A5%F3%A5%B3%A1%BC%A5%C9
UTF-8 %E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89
SJIS %83G%83%93%83R%81%5B%83h
JIS %1B%24B%25%28%25s%253%21%3C%25I%1B%28B


ここで気になるのが、
EUC-JPとUTF-8は、%xxだけで構成されているが、
SJISとJISにはそれ以外の表記(%83G や %25s など)も含まれている点だ。
G とか s は16進数じゃないじゃん!
何よこれっ嘘つきっ なんて思ってしまう。


気になったので、このことについて調べたみた。
以下が G や s が出てくる理由をまとめたもの。


SJISやJISでは、漢字2バイトを1バイトずつに変換したとき、
変換後の文字列がASCII文字になる場合は、%xxで表さない。
そのため %xxG のような表記が現れる。
%xxG は %xx と G の2文字なのであって、
%xxG で1つの文字を表しているわけではない。


なるほどねっ!スッキリ!(・∀・)