Flash 8/Mac OS Xで、つぎのスクリプトを実行してみます(図001)。
図001■[アクション]パネルに記述したスクリプト
1. "\n"が改行コードと認識されない
期待するのは、以下のような[出力]です。
// [出力]:
line0
line1
=====
line0
ところが、実際の[出力]は、こうなります(図002)。
図002■[出力]パネルの表示
"\n"が改行コードと認識されておらず、そのまま文字として出力されています。newline定数を使えば改行はされるものの、String.split()メソッドで"\r"を区切り文字に指定して、ふたつのエレメントからなる配列に変換することができません。
2. エスケープ文字は全角バックスラッシュ?
[デバッグ]メニューから[変数のリストアップ]を確認すると、[出力]パネルにはつぎのように表示されます(図003)。
図003■全角バックスラッシュ(\)がエスケープ文字?
改行コードと認識されているのは、全角バックスラッシュを使った"\r"のようです。ということは、全角バックスラッシュ(\)を、エスケープ文字にすればよいのでしょうか。もしこれで動作したら、えらいことになる予感です。
図004■全角バックスラッシュ(\)ではエスケープされない
試すと、全角バックスラッシュ(\)は、エスケーブ文字にはならないようです。ほっとしました(図004)。
3. 半角バックスラッシュでエスケープ可能だが
懐かしのバグを思い出し、半角バックスラッシュ(\)でエスケープしたところ、ようやく期待した[出力]になりました(図005)。
図005■改行コードが正しく認識された[出力]
しかし、これで一件落着と思ってはいけません。つぎの変数を設定した2行のステートメントの違いが、おわかりになりますか?(図006)
図006■全角と半角のバックスラッシュ
全角バックスラッシュも半角バックスラッシュも、どう見ても同じです。しかし、確かに違った文字を入力しており、実際に処理結果も異なります。
これを正しく識別できるようにするには、[アクション]パネルでこれまた懐かしのMonacoフォントを使った方がよさそうです(図007)。
図007■Monacoに設定した[アクション]パネルの表示
[追記] 2006.12.17
円記号でなく、バックスラッシュをエスケープ文字とするのは、Flash 8/Mac OS Xからの仕様変更のようです。なお、「Flash 8/Mac OS Xで円記号がエスケープ文字として認識されない」をご参照ください。
[追記] 2007.02.24
Monacoフォントを使うと、Flash 8で挿入ポイント(カーソル)の表示位置にずれの生じる場合があるようです。
コメント区切り記号//を使った場合に、挿入ポイントの表示位置がずれる現象を確認しました。以下の図008で、挿入ポイントは行末("p"の後ろ)に置いています。フォントサイズを11ポイントにすると、表示のずれがより大きくなりました(Flash Professional 8/Mac OS X.4.8)。
図008■Monacoで挿入ポイントの表示位置がずれる
この記事へのコメント
●1.ken_taka(2006年01月14日 23:31)
野中さん、お久しぶりです。
で、UTF-8で保存する。あるいはバックスラッシュを「Option+Y」で入力する。
ではどうでしょうか。
●2.野中 文雄(2006年01月29日 17:55)
> UTF-8で保存する
外部asファィルとして保存し、#includeするということですか? その場合、Shift JIS保存で、"¥n"が正しく改行コードとして認識されました。UTF-8では、バックスラッシュにしなければなりませんでした。
> バックスラッシュを「Option+Y」で入力する
円記号¥が表示され、通常の文字列として処理されました。エスケープ文字として認識はされないようです。
●3.野中 文雄(2006年12月17日 15:18)
Macで半角バックスラッシュが全角に化ける問題を、ブラウザについて扱っているブログがありました。原因について関連があるかもしれませんので、参考に掲げておきます。
WEBプログラミングNOW!
「Safariと半角円マーク(Shift_JIS編)」
http://shimax.cocolog-nifty.com/search/2006/09/safarishift_jis_6a0f.html