URLエンコードされた文字列をデコードしたり、文字列をURLエンコードしたりなど、nkfコマンドを使えば簡単にできます。
以下にnkfを使ったURLエンコード・デコードの使用例を記します。
注意事項:本資料では文字コードをUTF-8として記述しています。
オプションとしては、-W -w となります。
最近はUTF-8が主流だと思いますが、他の文字コードを使っている場合は、
man nkf や man --help でオプションを確認してください。
使用例としては、URLエンコードされた文字列を確認することが多いと思います。
デバッグ中なので、取得したURLエンコードの文字列をターミナルで素早く確認したい場合などに便利だと思います。
URLエンコードされた文字列を使って実験してみます。
sakura@cygwin ~$ echo "%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AFLinux" | nkf -w --url-input こんにちはLinux
上記のようにURLエンコードされた文字列がデコードされ表示されます。
nkfでURLデコードする場合は、以下のような構文になります。
echo URLエンコード文字列 | nkf -Ww --url-input
以下のようにしても同等な出力が得られます。
echo URLエンコード文字列 | tr % = | nkf -WwmQ
$ echo "%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AFLinux" | tr % = | nkf -WwmQ こんにちはLinux
URLエンコードの場合は、以下の構文になります。
だだし、当方の調査では意図しない動作になったこともあるので対処方法も記します。
そもそも使い方が間違っている可能性もあるので参考程度にしてください。
nkfでURLエンコードするには、以下の構文になります。
echo エンコードしたい文字列 | nkf -WwMQ | tr = % | tr -d '\n' | sed -e 's/%%/%/g'
以下、調査内容を記述
sakura@cygwin ~$ STR='URLエンコード・デコード' sakura@cygwin ~$ echo $STR URLエンコード・デコード sakura@cygwin ~$ echo $STR | nkf -WwMQ URL=E3=82=A8=E3=83=B3=E3=82=B3=E3=83=BC=E3=83=89=E3=83=BB=E3=83=87=E3=82= =B3=E3=83=BC=E3=83=89
上記の通り、改行が入っているのが確認できます。
また出力された1行目の最後の=と2行目の最初の=が存在しているのが確認できます。
以下の通り=を%にtrコマンドで置換しています。
sakura@cygwin ~$ echo $STR | nkf -WwMQ | tr = % URL%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%83%BB%E3%83%87%E3%82% %B3%E3%83%BC%E3%83%89
これでも改行があるので、改行を消します。
sakura@cygwin ~$ echo $STR | nkf -WwMQ | tr = % | tr -d '\n' URL%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%83%BB%E3%83%87%E3%82%%B3%E3%83%BC%E3%83%89
さらに、%が2つ続いているところがあるので、2つ続いている%を1つの%にsedで置換しています。
echo $STR | nkf -WwMQ | tr = % | tr -d '\n' | sed -e 's/%%/%/g' URL%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%83%BB%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89
実際の実行例です。
sakura@cygwin ~$ STR='URLエンコード・デコード' sakura@cygwin ~$ echo $STR URLエンコード・デコード sakura@cygwin ~$ ENC=`echo $STR | nkf -WwMQ | tr = % | tr -d '\n' | sed -e 's/%%/%/g'` sakura@cygwin ~$ echo $ENC URL%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%83%BB%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89 sakura@cygwin ~$ echo $ENC | nkf -Ww --url-input URLエンコード・デコード $ echo $ENC | tr % = | nkf -WwmQ URLエンコード・デコード
以上、nkfを使ってURLエンコード・デコードをする方法でした。