本ブログの更新は停止しています。更新は新しいサイトの Travellers Tales で行なっています。

文字コードを変換する


正確には AppleScript ネタではなくて、シェルの iconv というコマンドに関することなのですが、AppleScript で文字コードを変換するには、いちばん楽な方法ではないかな?

iconv はシェルのコマンドで、テキストのエンコーディングを変換するものです。このコマンドの偉いところは、日本語はのみならず、Unicode から中国語、韓国語をはじめとする各国語をカバーしているところです。文法は以下の通り。
iconv -f 元のエンコーディング -t 変換したいエンコーディング 入力ファイル

このコマンドを使って UTF-8 で取得したファイル名やフォルダ名を変換しようと思ったのですが、最初はうまくいきませんでした。

例えば、デスクトップ上のファイル/フォルダ名を取得して、result.txt というファイルに書き出す以下のようなスクリプトです。
do shell script "ls $HOME/Desktop/ | iconv -f UTF-8 -t SHIFT-JIS > $HOME/Desktop/result.txt"
実は、これは、UTF-8 を UTF-8-MAC に変えてやれば動きます。

いろいろ試した結果、ここで ls が吐き出している UTF-8 が素直に変換できないのは、吐き出される Unicode が Decomposed form になっているためだとわかりました。HFS+ は仕様上、日本語の濁点付き仮名などは Decomposed form で記録されます。従って ls の結果には Decomosed form が含まれるため、iconv で変換する場合、ただの UTF-8 と指定したのではダメで、UTF-8-MAC としてやらなければダメなようです。UTF-8 と UTF-8-MAC の違いが他にもあるのかわからないのですが、とりあえず iconv での Decomposed した Unicode の変換には、UTF-8-MAC と覚えておきましょう。

UTF-8-MAC であれば、Decomposed してない Unicode もきちんと変換できるので、UTF-8 と UTF-8-MAC を分けないで、UTF-8-MAC を UTF-8 にすればよいのに、と思うのは素人考えなのでしょうか。Decomposed Unicode 自体は、Unicode の Normalization Form として定められているものなので、特に Mac だけのものというわけではないでしょうし。

ちなみに
iconv -l
とやると、利用可能なエンコーディングがすべて表示されます。

Decomposed Unicode に関する参考リンク:

Posted: 土 - 7月 3, 2004 at 01:47 AM               Hatena Bookmark



©