マルチバイト文字のエスケープ
他サーバのデータをPHPを経由してflashに丸渡しする場合に、サーバのやり取りで引っかかったこと。
エスケープされた文字列をunescapeで元に戻そうとしてもうまくいかない。
調べてみるとas3からutilsにある
・unescapeMultiByte
・escapeMultiByte
を使うとうまくいきました。
[ テスト ]
import flash.utils.unescapeMultiByte; import flash.utils.escapeMultiByte; var str:String = "100%おなかが減った"; var esc:String = escape(str); var escM:String = escapeMultiByte(str); trace("escape:",esc); trace("unescape",unescape(esc)); trace("escapeMultiByte:",escM); trace("unescapeMultiByte:",unescapeMultiByte(escM));
[ 結果 ]
escape: 100%25%u304A%u306A%u304B%u304C%u6E1B%u3063%u305F unescape 100%おなかが減った escapeMultiByte: 100%25%E3%81%8A%E3%81%AA%E3%81%8B%E3%81%8C%E6%B8%9B%E3%81%A3%E3%81%9F unescapeMultiByte: 100%おなかが減った
上のようにflash内完結だと問題なさそうですが、
unescapeだとサーバとやり取りして投げられるデータが変だったので
たぶんunescapeMultiByteを使っておけば問題ないのでしょう。
[ 参考 ]
文字列のエスケープ | akihiro kamijo