この URL エンコードを手元で簡単にできるように AppleScript を併用して TextExpander のスニペットにしてみました。
「TextExpanderの使い方」という書き下ろしエントリを書きましたので、よろしかったらご覧ください。⇒ 「TextExpanderの使い方」を公開しました
<追記>
このスニペットは Mac 版の TextExpander のみで動きます。
iPhone/iPad の TextExpander では動作しませんので、ご注意ください。
としやさん (@toshiya240) 、ご指摘ありがとうございました。
</追記>
URL エンコードって?
Wikipedia には
パーセントエンコーディング(英: Percent-Encoding)とは、URIにおいて使用できない文字を使う際に行われるエンコード(一種のエスケープ)の名称である。RFC3986のSection 2.1で定義されている。一般にURLエンコードとも称される。
via: パーセントエンコーディング – Wikipedia
http://ja.wikipedia.org/wiki/パーセントエンコーディング
と書いてあります。
難しいことを端折るために、正確性には欠きますがざっくり言うと、URL に使えない文字を %xx という文字に変換する方法です。この変換をエンコードとかエスケープとか符号化と言ったりするわけです。
この変換には文字一つ一つに割り当てられているコード(文字コード)を使うのですが、日本語についてはこのコード体系が何種類もあるので、利用する環境によってコード体系が違ったりしてうまく動かないことが多々有ります。
そこで、今回は日本語部分に関しては無視して、アルファベット(ASCII範囲)のみの対応とします。
何をしたら良いのか
先ほども書いたように、URLに使えない文字を符号化すれば良いのです。URLに使っていい文字というのは “*”, “-“, “.”, “_” と 0−9、a-z、A-Z の文字のみ(実際にはもう少し揺れがあるのですが)。したがって、これらの文字はそのままに、それ以外の文字については %xx という出力をするようにします。ここで xx の部分は、その文字の文字コードを 16 進数で表現します。
ここまでを AppleScript で書いて TextExpander から呼び出したいと思います。
スニペットはこんな内容
いきなりですが、スニペットコードを以下に書きます。Content を AppleScript にして以下のコードを書いてください。
ココ にも置いておきますので、TextExpander のファイルメニューにある “Add Group from URL” に “http://azur256.com/data/URLEncode.textexpander” を指定することで登録できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
on urlEncode(originalString) set encodedString to "" repeat with eachChar in characters of originalString set bufferChar to eachChar set eachCharNumber to ASCII number of eachChar if eachCharNumber = 32 then (* set bufferChar to "+" //これはFormの場合 *) set bufferChar to "%20" (* アスタリスク:42,マイナス:45,ピリオド:46,アンダースコア:95 *) (* 0-9: 48-57, A-Z: 65-90, a-z: 97-122 *) else if not ((eachCharNumber = 42) or (eachCharNumber = 45) or (eachCharNumber = 46) or (eachCharNumber = 95) or (eachCharNumber > 47 and eachCharNumber < 58) or (eachCharNumber > 64 and eachCharNumber < 91) or (eachCharNumber > 96 and eachCharNumber < 123)) then set bufferChar to "%" & dec2Hex(eachCharNumber) as string end if set encodedString to encodedString & bufferChar as string end repeat return encodedString end urlEncode on dec2Hex(decimalNumber) if decimalNumber = 0 then return "" return dec2Hex(decimalNumber div 16) & (character ((decimalNumber mod 16) + 1) of "0123456789ABCDEF") end dec2Hex urlEncode(the clipboard as string) |
URL エンコードしたい文字列をクリップボードに入れて、このスニペットを呼び出すと URL エンコードされた文字列が出力されます。
ちょっとだけコードを解説
urlEncode が与えられた文字列を url エンコードをする関数です。”*”,”-“,”.”,”_” という文字と一致するかを判定して処理を分けています。最初に半角スペース(32)かどうかを判断するコードが入っています。URLエンコードの種類によっては 半角スペース を “+” プラス記号 に変換する必要があります。最初はプラス記号に変換するコードで書いていたのですが、 iPhone の URL スキームは %20 に変換するパーセントエンコーディングで良いようです。
AppleScript で取り出す文字コードは 10 進数なので、これを 16 進数に変換する関数が dec2Hex という関数(この関数はずっと昔にどこかで教えてもらった関数で自作ではないです)。
関連するエントリ
TextExpander のエントリもだいぶ増えてきました。そろそろまとめた方が良さそうな気がしていますが、時間も掛かりそうついつい後回しに(笑)関連するエントリ
最後まで読んでいただきありがとうございます。
左のアイコンをクリックして、このブログを Feedly に登録していただけると嬉しいです
Facebook ページでも情報を発信していますのでよろしかったら「いいね!」をお願いします
RSSリーダへの登録は こちら からどうぞ。
コメントを残す