わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

リージョンをURLエンコード

http://ja.wikipedia.org/wiki/× をFirefoxで開き,URLをコピーして
Emacsに貼り付けると,http://ja.wikipedia.org/wiki/%C3%97 になります.
自作lisp: × => %C3%97
htmlutil: × => %D7
http://ja.wikipedia.org/wiki/%D7 は有効なURLです.
自作lisp: 和歌山 => %E5%92%8C%E6%AD%8C%E5%B1%B1
htmlutil: 和歌山 => %548C%6B4C%5C71
http://ja.wikipedia.org/wiki/%E5%92%8C%E6%AD%8C%E5%B1%B1 は有効なURLです.
http://ja.wikipedia.org/wiki/%548C%6B4C%5C71 は無効なURLです.

何をしたか

Emacs上で,お手軽にURLエンコードできる方法を,調べてみました.ブラウザやターミナルを使わず,Emacs単体でできないか,です.
具体的には,領域を指定して1回操作するだけで,その領域の非英数字を,「%」と16進2桁に…wikipedia:パーセントエンコーディングしてくれればいいのです.
それで,見つかったのが,htmlutilというもの.

url-quote-regionが,お目当ての関数です.
さっそくダウンロードし,「(load "htmlutils")」を書いてめでたしめでたし…
と思いきや,日本語に対応していないことに気づきました.
では自分で書きますか.htmlutils.elを覗いたところ,url-quote-region→url-quote-str→url-escape-pointという呼び出し関係があるのが分かりました.このうちurl-quote-strに手を加えれば,よさそうです.
URLのエンコーディングは,UTF-8決め打ちとして実用上は十分です.Emacsの中でUTF-8にするには…

このうち「(encode-coding-string "漢字です" 'utf-8)」を使いましょう.
もう一つ,手間をかけておきます.領域を選択してM-x url-quote-regionとすると,もとの文字列がなくなります.残しておき,不要になったら手作業で消すほうが,編集のとき何かと役に立ちます.
なので仕様は,「領域を選択して M-x url-quote-region-utf8 で," => URLエンコード文字列" を挿入」としました.*1
出来上がったコードは,いつものようにGistに置いています.

*1:冒頭の「htmlutil: × => %D7」は,いったん「htmlutil: × => ×」と書いて,後者の「×」を領域指定してからM-x url-quote-regionとしています.