Satimage OSAXでテキストを指定エンコーディングでファイルに書き込み

テキストを指定エンコーディングでファイルに書き込むAppleScriptです。

どうしても、UTF-16BE(Big Endian)でファイル書き込みをしなくてはならず、(作っているのが)どうせwrite binary命令のためにSatimage OSAXの使用を解禁しているAppleScriptだったため、テキストの書き込み命令もSatimage OSAXに入っているものを使えばいいや、どうせ入っているだろうし……と、考えました。

writestring.png

……やはり、当然のようにwritetext命令があり、「UTF-16」でファイルに書けることはAppleScript用語辞書に記載されているのですが、UTF-16BEについては明記されていません。

ただ、AppleScript用語辞書内の書き方が「デフォルトはUTF-8だけどだいたいIANAで決められている文字セット名なら通るよ〜ん」という感じだったので、「UTF-16BE」をおもむろに指定してみたところ、問題なくUTF-16BEで書き込めました。

stringout1.png

stringout2.png

ああ、本当にSatimage SoftwareをAppleが買収したらいいのに!! 

ただ、あまりに便利なSatimage OSAXに慣れてしまうと、自分で作ったAppleScriptを広く配布しようとしたときに問題が発生するので、同様の処理をAppleScriptObjCで記述できるようにしておくことが重要になってくるのでしょう。

スクリプト名:Satimage OSAXでテキストを指定エンコーディングでファイルに書き込み
–Caution !! This AppleScript require “Satimage OSAX” from Satimage Software
–http://www.satimage.fr/software/en/downloads/downloads_companion_osaxen.html

set a to choose file name

set aText to “ABCDEFG”
set bText to “あいうえお”

writetext aText to a encoding “UTF-16BE” with append
writetext bText to a encoding “UTF-16BE” with append

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

4 Responses to “Satimage OSAXでテキストを指定エンコーディングでファイルに書き込み”

  1. dreiross Says:

    こっちも実は標準のwirteで出来ますね

    write ~ は環境依存(日本語環境ではShift_JISだかMacJapanese?、英語だとASCII)
    write ~ as string は同上
    write ~ as Unicode text はUTF-16BE
    write ~ as «class ut16» はUTF-16LE(BOM付き)
    write ~ as «class utf8» はUTF-8

    10.5辺りからstringとUnicode textは等価になったと聞いてますが、
    read/writeでは違いが出るみたいですね

  2. maro Says:

    コメントありがとうございます。うっかり見逃していて、今日(12/5)気づきました。

    このあたり、日ごろは見落としてしまうところなのでご指摘ありがたいです。

    ひととおり実験用プログラムを組んで実行して、結果をダンプして確認を行ってみたところ、

    「10.6と10.8では、as Unicode textの結果とas < >の結果が反対」

    だということが分かりました。dreirossさんはこれを10.5か10.6で確認されたのだと思いますが、10.8では結果が違いました。

    10.7とか10.5のテストをやったら、記事にまとめてみるつもりです。

  3. maro Says:

    >as <>の結果が

    「as «class ut16»の結果が」と書いて送信しました(めんどくさがって、半角不等号を複数入力したら、タグとみなされて文字を除去されたもよう)。

  4. maro Says:

    10.7は10.6と同じ結果が出ました。10.8だけ「as Unicode text」と「as «class ut16» 」の結果が違う(10.5も未検証ですが)ということに。

Leave a Reply