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としています.