マルチバイト文字のエスケープ

他サーバのデータを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

Filed under AS3, 問題解決メモ · Tagged with

Speak Your Mind

Tell us what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!

You must be logged in to post a comment.