AppleScript とURLエンコード・デコード
ここでいうURLエンコード・デコードとは、ブラウザに要求するURL文字列の中に、URLとして使用してはいけない文字コードを、エンコード・デコードすることで、他にパーセントエンコードや、エスケープなどとも呼ばれるものです。
これは RFC3986のSection 2.1 で定義されています。
AppleScript には、文字コードをURLエスケープする関数が入っていない(多分)ので、他の助けを借りて実装します。
OS Xに組み込まれていて変換に利用できるもの
do shell script を使用して、OS Xに入っている機能を使いますが、それには次のような方法があるようです。
PHP を使う
php -r 'echo rawurlencode("<<変換文字列>>”);'
Perl を使う
perl -MURI::Escape -wle 'print uri_escape("<<変換文字列>>")'
Ruby を使う
ruby -r cgi -e 'puts CGI.escape("<<変換文字列>>")'
選んだのは
perl のURI::Escape モジュールは、渡す文字列の中にエンコード不要な文字が入っていると、正しく変換できない問題があるようです。
それ以外で、文字数がすくなかった PHP を選びました。
エンコード・デコードする AppleScript
起動するとエンコードかデコードしたい文字列を入力するダイアログボックスが出力されます。
入力する文字数は、このボックスを無視して長いものでもOKです。
入力した後、「URLエンコード」か「URLデコード」のボタンを押します。
「OK」ボタンを押すと、変換結果のみがクリップボードにコピーされます。
-- 入力した文字列をURLで使用できない文字をエスケープ(%エンコード・URLエンコード)したり、
-- 逆にエンコードされた文字列を元の文字列に変換して表示します。
-- 表示後にOKボタンを押すと、変換結果をクリップボードにコピーします。
-- エンコード・デコード部分は php の関数を使用しています。
on urlEncode(inData) -- URLエンコード(%エンコード)
-- 文字コードを utf8 としてエンコードしたい場合は、「as «class utf8»」で変換したものを渡すこと。
set scpt to "php -r 'echo rawurlencode(" & quote & inData & quote & ");'"
return (do shell script scpt) as string
end urlEncode
on urlDecode(inData) -- URLデコード(%デコード)
set scpt to "php -r 'echo rawurldecode(" & quote & inData & quote & ");'"
return (do shell script scpt) as string
end urlDecode
set ans to display dialog "変換したい文字列を入力" default answer "" buttons {"URLデコード", "URLエンコード"} default button 2
set inData to text returned of ans
if button returned of ans = "URLエンコード" then
set rs to urlEncode(inData)
else
set rs to urlDecode(inData)
end if
display dialog "変換結果:" & return & return & rs & return & return & "(OKボタンでクリップボードにコピーします。)"
set the clipboard to rs