【AEスクリプト】設定の保存&呼び出しを日本語対応にする。

*記事内でhaveSetting()、getSetting()、saveSetting()の詳しい使い方は省略しています。

AEのスクリプトでは、saveSetting()とかgetSetting()でスクリプト独自の設定を環境設定に保存&呼び出しができます。んで、その設定は普通の環境設定と同じく『Adobe After Effects ○○ 環境設定.txt』っていうファイルに文字列で保存されます。メニュー/環境設定/一般設定の下のほうにある「環境設定をエクスプローラーで表示」ボタンを押せば簡単に参照できますね。

これを活用すれば、ユーザーがお気に入りの数値を入力したときなんかに、再度AEを開いても同じ数値が入力されたままにできたり、便利なんですね。

しかし、一個問題がありまして、日本語で設定を保存しようとすると文字化けしてしまうんですよね…。Adobeの英語以外の言語対応はマジ適当なんだよなあ…。

Spookieを作ったときに、エフェクト名を日本語で環境設定に保存しとく必要があったので、その問題をなんとか解決してみました。

最初は文字化けの原因を探って文字コード変換とかを試みたんですが「…AEに任せたら文字化けするならば、こっちで日本語から文字コードに変換してから保存、呼び出すときはそれを呼び出して日本語に変換すればよくね!?」と思いたった次第です。

以下、コードです。

//文字をコード(数字)の文字列にする関数。
function mConvertTxtToCodesTxt(aTxt) {
    var mNameCodes = [];
    //文字を一つずつUnicode(数字)で取得して、配列に入れる。
    for (var i = 0; i < aTxt.length; i++) {
        var mCode = aTxt.charCodeAt(i);
        mNameCodes.push(mCode);
    }
    //コードの配列をコンマ区切りの文字列にする。
    //aTxtに””を入力すると、lengthゼロなので直接ここへ来て、空の配列mNameCodesを処理する。
    //join()は[]を””にするので、戻り値がコード文字列or””となるが、読み込み関数で処理する。
    var mNameCodesStr = mNameCodes.join(",");
    return mNameCodesStr;
}
//---------------------------------------------------------------------------
//コード(数字)の文字列を元の文字にする関数。
function mConvertCodesTxtToTxt(aCodesTxt) {
    //空""にはコード番号はない。それに対し、
    //(本来コード番号数値を入れるはずの)fromCharCode()に空””(文字列)を入れると
    //なぜかコード番号0番目の空を取得してしまう。厳密には変換できていないので、その対策が以下。
    if (aCodesTxt === "") { return "" }

    //まずは文字列を配列にする。
    var mNameCodesAry = aCodesTxt.split(",");
    var mNameLetterAry = [];
    //Unicode(数字)を文字にして1つずつ取得、配列に入れていく。
    for (var i = 0; i < mNameCodesAry.length; i++) {
        var mLetter = String.fromCharCode(mNameCodesAry[i]);
        mNameLetterAry.push(mLetter);
    }
    //1文字ずつ入った配列を1つの文字列にまとめる。
    var mNameRst = mNameLetterAry.join("");
    return mNameRst;
}

上が保存前に使う関数、下が呼び出した直後に使う関数です。

簡単に解説します。

まず上のやつですが、
引数には保存したい日本語文字列を入れます。
その文字列を一文字ずつの文字列配列に変換しときます。
文字列配列の要素を一つずつユニコード(10進数の数字)に変換しながら新たな配列に入れていきます。
設定ファイルには文字列形式しか保存できないので、コンマ区切りの文字列に変換します。
この関数を使うと、そのコンマ区切りユニコード文字列が返ってきます。

下のやつは、
引数には、設定ファイルから呼び出したコンマ区切りユニコード文字列を入れます。
コンマで分割した配列に変換します。
配列の要素(ユニコード)を1要素ずつ日本語文字に変換しつつ、新配列に入れていきます。
新配列を1つの日本語文字列へ合体させます。
この関数を使うと、その日本語文字列が返ってきます。

いかがでしょうか!?
この2つの関数を使えば、設定に日本語を使うことができます。

使うときは、
上のmConvertTxtToCodesTxt()で日本語文字列をユニコード文字列に変換してからsaveSetting()、
getSetting()でユニコード文字列を得てから下のmConvertCodesTxtToTxt()で元の日本語文字列に変換、ですね。

ただ、実際のスクリプトでは設定関連部分のコードは
haveSetting()で設定があるか確認
あればgetSetting()で設定を得る
入力欄とかに変化があればsaveSetting()で保存
という流れなので、通常、記述は上のmConvertTxtToCodesTxt()+saveSetting()よりもgetSetting()+下のmConvertCodesTxtToTxt()が先にきますね。

ぜひともお使い下さい!

参考記事
Up Box ~CS2 & CS4 Scriptなど。。。。『AEスクリプト multiSelection ver 2.0 更新~』

よかったらシェアしてね!
  • URLをコピーしました!