またMacOS X版Flash MX 2004の[アクション]パネルで、問題発見です。エスケープ文字(\)が、Flash MXフォーマットで保存すると、別の文字に変換されてしまいます。
円記号の多彩な変身
[1]まず[アクション]パネルで、エスケープ文字(\)をストリングに用いたステートメントを書きましょう(図001)。\nは、改行として解釈されます。
// フレームアクション
my_txt.text = "test\ntest2";
図001■ストリングにエスケープ文字(\)を使う
[2]つぎにこのファイルを、Flash MXフォーマットで保存します(図002)。Flash MX形式で保存することを確認するダイアログが表示されるので、[Flash MXとして保存]ボタンをクリックします。
図002■保存のダイアログボックスで[フォーマット]から[Flash MXドキュメント]を選択
[3][アクション]パネルのステートメントを確認すると、円記号がバックスラッシュに変換されています(図003)
図003■ストリング中の円記号がバックスラッシュに変わっている
しかし、見た目が変わっても機能に変わりはありません。バックスラッシュは、欧文ではエスケープ文字とされているからです。
[4]ここで、[アクション]パネルのバックスラッシュを、円記号に打直します(バックスラッシュも円記号も、どちらもエスケープ文字として機能します)。そしてもう一度、Flash MXフォーマットで保存してみましょう。通常の[保存]では、MX 2004フォーマットに戻ってしまうので、[名前を付けて保存]を使用します。
[アクション]パネルに、ご注目ください。円記号のかたちが少し変わったように思いませんか(図004)?
図004■スタイルが気持ち変わった気のする円記号
左が保存後の変換された円記号。右が元のエスケープ文字としての円記号
見た目が少しくらい変わっても、まだバックスラッシュよりまし...とはいえません。機能が変わってしまっているからです。
[5]メインのタイムラインにTextFieldインスタンスmy_txtを配置して、[ムービープレビュー]でテキストを確認してみましょう(図005)。
図005■[ムービープレビュー]で表示されたストリング
円記号がエスケープ文字として認識されていない
円記号がそのままテキストとして表示され、エスケープ文字として認識されていないことがわかります。
円記号の変身はどこで決まるのか
Flash MXフォーマットで保存すると、円記号が変換されることはわかりました。しかし、円記号がバックスラッシュになるかエスケープ文字でない円に変わるかは、どこで決まるのでしょう。
筆者のテストによれば、[パブリッシュ設定]の[Flash](図006)で、[ActionScriptのバージョン]が[ActionScript 2.0]ならバックスラッシュ、[ActionScript 1.0]になっているとエスケープ文字でない円記号に変換されるようです。
図006■[パブリッシュ設定]の[Flash]タブ
[ActionScriptのバージョン]で[ActionScript 2.0]と[ActionScript 1.0]を選択できる
ではどう対応するか
この動作に合理的な説明を与えることは、困難でしょう。つまり、バグだと思われます。知っていてもついうっかりハマってしまいそうという意味で、かなり嫌なバグです。対応方法としては、ふたつ考えられます。
[1]Flash MXで保存する前には、必ず[ActionScriptのバージョン]を[ActionScript 2.0]に設定しておくことがそのひとつです。Flash MXフォーマットで保存するには、[名前を付けて保存]を選択しなければならず、しかもいちいち確認のダイアログが表示される煩わしさを考えれば、最後の最後までFlash MXフォーマットでは保存しないことがよいかもしれません。
しかし、仕様変更とか修正とか、これで最後と思っても最後にならないのが常です。ついうっかりの可能性は、なくならないでしょう。
[2]いっそのこと、エスケープ文字には必ずバックスラッシュを使うという方が、確実かもしれません。ただし、キーボードにはバックスラッシュがないので、[文字パレット]などを使って入力する煩わしさが発生します。しかし、検索や置換の機能を使えば、それほど手間はかかりません。後々遺恨を残すより、不安の根を断つ方が安心な気もします。
エスケープ文字の円記号には他にもバグと思われる問題がありますので、筆者としては今のところ[2]の方を採りたいと考えています。アプリケーションの修正を加えてもらえるのが一番望ましいことは、いうまでもありません。
この記事へのコメント
●1.あ(2003年12月30日 19:40)
あ〜らら。
¥と\って 2バイトになっているってこと? 円だから日本だろうって? 親切心なんでしょうか。
●2.野中文雄(2003年12月31日 03:42)
Macromediaさんに確認したところ、やはりバグのようです。
バックスラッシュ(\)は、円記号(¥)と同じASCIIコードで認識されているようですので、見た目はともかく機能としては問題ありません。 ¥は、確かに2バイト文字です。余計なお世話は止めてくださいといいたいですね。
●3.野中 文雄(2005年12月17日 12:07)
Flash MX 2004の[アクション]パネルに入力した半角円記号(\)を、単純にFlash MXの[アクション]パネルにコピー&ペーストしただけで、全角円記号(¥)に変わることを確認しました。
だから仕様だ、というのも許されないとおもいますが。