9 パーセント・エンコーディング、デコーディングをコマンドラインで (nkf の利用)

(以前からちょっと疑問に思っていたことの解消。現実逃避かも。)

URLにパーセント・エンコーディングというのがある。 何というか説明しづらいが、“漢字のような” 文字はURLには使っていけないので (URL Standard でそうなっているとか)、 16進数を使って表す決まりだとか。 例えば C言語だと 0x0d とするところを %0d とする。 -- 我ながらひどい説明だ。

必要性はわからないでもないけれど、正直言って嫌いである (わがまま)。

理由

例をあげる。

https://support.office.com/ja-jp/article/android-%E3%81%A7-office-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%99%E3%82%8B-cafe9d6f-8b0c-4b03-b20a-12438a82a22d        
ほら、長くなって、ブラウザを横スクロールしないと読めない。これは元々は
https://support.office.com/ja-jp/article/android-で-office-をインストールしてセットアップする-cafe9d6f-8b0c-4b03-b20a-12438a82a22d
という文字列であった (こちらもかなり長いな、でも何のファイルか良く分かる)。

デコードは原理的には簡単だけれど、自分でプログラムを書く気はしないので、 探してみた。多分 nkf で出来るだろうと思っていたけれど、当たり。

参考: Linux:コマンドラインでURLエンコード・デコードする(nkf編)

URLエンコード
nkf -WwMQ | tr = %
入力は UTF8 と仮定し、MIME の quoted encoding をして、 最後に tr を使って =% に置換する。

(余計なところまで16進数にされる気がする…)

URLデコード
nkf -w --url-input
% に続く 16 進数を文字に変換し (--url-input     …これがポイントのようだ)、 出力は UTF8 にする (-w)。

試してみる (横スクロールしないと見えない)
echo https://support.office.com/ja-jp/article/android-%E3%81%A7-office-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%99%E3%82%8B-cafe9d6f-8b0c-4b03-b20a-12438a82a22d|nkf --url-input -w
出来た。


ところで、nkfの日本語マニュアルって保守されているのかな? あった。 https://osdn.net/projects/nkf/scm/git/nkf/blobs/master/nkf.1j

あるいは
git clone https://scm.osdn.net/gitroot/nkf/nkf.git
とすると、nkf のソース一式が入手できる。



桂田 祐史