Linuxゲリラ戦記

犬エンコードと犬デコードの技術が出来たら、うちの飼い犬と会話したい。

40.Linuxのコマンドから行うURLエンコード、URLデコード

ナックス「昔、愚かな人間達は自分の能力を過信し、天にも届こうという塔を立てようとした……」

ナックス「思い上がった人間を見て怒った神は、人間達の言葉を英語や日本語、中国語などにバラバラにしてしまい、意思の疎通を出来ないようにしたのだ……!!」

ナックス「そんなバラバラになってしまった言語の一つがクエリで使うURLエンコードされた言語です」

デビー君「神話の世界ってパソコンあったっけ?」

ナックス「さて、前回はクエリのなんやかんやをしましたが、今日はクエリでデータを渡すときに使う、神をも恐れぬURLエンコード、URLデコードを解説したいと思います」

デビー君「いえーい」

ナックス「今回使うコマンド、その1はnkfコマンドです」

$ echo 神は死んだ | nkf -wMQ
=E7=A5=9E=E3=81=AF=E6=AD=BB=E3=82=93=E3=81=A0

デビー君「おぉ。久しぶりに|(パイプ)が!!そして、echoが実用的に使われている!!」

ナックス「nkfは漢字コードの変換フィルタです。最初に言いましたが、神はあらゆる言語をバラバラにしました。その怒りはパソコンの中の日本語の文字にまで及び、見た目は同じ日本語なのに、 JIS コード (ISO-2022-JP に基づくもの)、Shift_JIS (MS 漢字コード)、日本語 EUC (AT&T コード)、UTF-8、UTF-16など、中身が異なるさまざまなコードを生み出しました」

ナックス「皆さんも文字化けをしたサイトを見たことがあるかもしれません。あの文字化けは、コードが異なるところから来ているのです!」

デビー君「難しい話はさっぱりです!」

ナックス「分かりやすく言えば、nkfコマンドは文字化けを直したり、文字化けをしないようにしたりするときに使う、パソコン内で日本語を処理する時に使えるイカしたコマンドです。神に対して人間が作りし武器です」

デビー君「カッコいい!」

ナックス「そんなスペシャルなnkfコマンドは、もちろんURLエンコードもお手の物です、上記の様に echo コマンドでURLエンコードしたい文字を表示し、それをパイプで隣のnkfコマンドに渡して変換しています。ちなみに、-wMQはnkfコマンドのオプションです」

デビー君「意外と楽にURLエンコードできるね」

ナックス「だが、神は滅んではいなかった……!!」

デビー君「え?」

ナックス「これはまだきちんとURLエンコードできていません。正しくURLエンコードするのに、あともう1処理が必要です」

ナックス「それがtrコマンドです」

$ echo 'イケてる?' | tr ? !
イケてる!

ナックス「trコマンドは、文字を変換したり削除したりするコマンドです。ちなみに、シェル上で日本語を直接使うのはあまりよろしく無いので、上記の例をそのまま実行すると皆さんの環境では文字化けするかも……」

ナックス「使い方はこんな感じです」

tr コマンド
使用例
tr 文字列1 文字列2
意味
文字列1を文字列2に置き換える

デビー君「ふむふむ」

ナックス「正しくURLエンコードするには、先程の」

$ echo 神は死んだ | nkf -wMQ
=E7=A5=9E=E3=81=AF=E6=AD=BB=E3=82=93=E3=81=A0

ナックス「の = を % に置き換えなければなりません」

ナックス「つまり」

$ echo 神は死んだ | nkf -wMQ | tr = %
%E7%A5%9E%E3%81%AF%E6%AD%BB%E3%82%93%E3%81%A0

ナックス「となります」

デビー君「パ、パイプ二刀流!!」

ナックス「はい、パイプ | は連続でいくつも使えます。つまり、いくらでも隣のコマンドに結果を渡せるのです」

ナックス「じゃあ、URLエンコードしたこの文字を実際に使えるか試してみましょう」

ナックス「前回の一番最初のGoogleクエリ」

http://images.google.co.jp/images?hl=ja&source=hp&q=%E5%A3%81%E7%B4%99&gbv=2&aq=f&aqi=g10&aql=&oq=&gs_rfai=

デビー君「あー。シンプルな方のクエリだね」

ナックス「そうです。それの」

http://images.google.co.jp/images?hl=ja&source=hp&q=ここにURLエンコードした文字を入れよう&gbv=2&aq=f&aqi=g10&aql=&oq=&gs_rfai=

ナックス「'ここにURLエンコードした文字を入れよう'の箇所に先程自分で作成した'神は死んだ'のURLエンコード処理された文字を入れて、それをウェブブラウザのアドレス入力欄に書き込んでEnterキーを押そう」

http://images.google.co.jp/images?hl=ja&source=hp&q=%E7%A5%9E%E3%81%AF%E6%AD%BB%E3%82%93%E3%81%A0&gbv=2&aq=f&aqi=g10&aql=&oq=&gs_rfai=

アドレスバーに

アドレスを入れて

Enterキーを押そう

デビー君「おー。出来とる!!」

ナックス「できれば'神は死んだ'以外の、自分で考えたキーワードをURLエンコードして試してみてください」

ナックス「さて、エンコードされた文字を元に戻すことを『デコードする』と言います」

ナックス「やり方は以下の通り!」

$ echo '%E7%A5%9E%E3%81%AF%E6%AD%BB%E3%82%93%E3%81%A0' | tr % = | nkf -WwmQ
神は死んだ

デビー君「まず、% は = に戻して……、nkfコマンドのMだったのがmになってるね。Wの大文字も追加されてるし……。nkfコマンドのオプションは詳しく解説してくれないの?」

ナックス「申し訳ございません。文字コードの話になると、少々長くなりすぎるので、とりあえずは上記のまま覚えていただけますか?また、上記の通りにやっても、環境によっては文字化けしてしまうかもしれません。ごめんなさい」

ナックス「要するに、人間はまだ本当の意味で神を倒せていないということです」

デビー君「ナックスというペンギンは日本語を喋れるのにね」

ナックス「はい。ペンギンは塔なんか作っていませんからね。さて次回。javascriptの話(41.JavaScriptっていうのがあるんです)」

参考にしたサイト

【Linux】nkf : URLエンコード・デコード

こちらのサイトではEUCコードを前提としたコマンドを解説されていますが、Google画像検索がUTF-8コードを使用していたため、当サイトとコマンドが少々違います。文字コードって難しいです。

このエントリーをはてなブックマークに追加