Sat, 25 Jun 2005
CotEditor用のスクリプトを書いてみるそのなななななな
昨日のエントリ、CotEditor用に書いたスクリプトの実行時に文字化けが発生して困った、という話しの続き。作者の中の人の方から示唆を頂いたのを参考に、スクリプトの要所で文字コードがどのようになっているのか調べてみました。示唆の内容は次の通り。
シェルスクリプトからアップルスクリプトを呼び出す段階で 「osascript」コマンドが使われてますが、どうやらこれは与えられた文字列をデフォルトCエンコーディング(日本語の場合はShift-JIS)で解釈するようです。化け方も、UTF-8をShift-JISで読み込んだときと同じでした。
変換処理を行なう元ファイルは日本語EUCで改行コードがCR/LFなもの。んで、変換用のシェルスクリプトは次の通り。
#! /bin/sh
# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=ReplaceSelection}%%%
INPUT=`cat - | tee ~/Desktop/INPUT.txt`
echo "<kbd>${INPUT}</kbd>" | tee ~/Desktop/OUTPUT.txt
変換後にDesktop/INPUT.txt
とDesktop/OUTPUT.txt
を開いてみると…UTF-8でLFになっていました。CotEditorからスクリプトに処理が渡った時点で文字コードと改行コードの変換が行なわれているということでしょうか。逆に、スクリプトからCotEditorに処理が返った時点でもう一度変換が行なわれているのか…この処理の間にAppleScriptが入った場合におかしなことになる、と。
もうちょっと実験。次のように書いて、処理中の文字コードを変えてやると、どうなるでしょう。…/usr/bin/tee
が吐いたファイルの中身は、今度は変換したなりの文字コードのものでした。元ファイルの文字コードとは違うコードへ変換したのですが、文字化けは無し。
#! /bin/sh
# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=ReplaceSelection}%%%
INPUT=`cat - | /usr/local/bin/lv -Iu8 -Os | tee ~/Desktop/INPUT.txt`
echo "<kbd>${INPUT}</kbd>" | tee ~/Desktop/OUTPUT.txt
さて、AppleScript側にShift-jisで渡せるようになったので、前回のスクリプトを修正して、でわさっそく…やっぱり文字化けしました。うーん…寝るかな。