AIR: 2008年8月アーカイブ

mixi echoクライアントを作った時にはまったので、メモ


前回の、[Flex][AIR] URLLoaderで取得したEUCのデータをutf-8にデコードするで、サーバーからeuc-jpでエンコードされたデータを受け取れることはできて、次に、そのサーバーへ何かをPOSTする時に、日本語が入る場合はURLエンコードなのでeuc-jpをエンコードしなければならない。


POSTする値をURLVariablesで管理している場合は、自動的にescape関数を呼んでURLエンコードしてくれるのだけど、このescapse関数は、utf-8をエンコードする前提で作られているのか、euc-jpを与えるとうまく変換してくれないみたい。


だったら自分で作ってしまえ!!



まず、POSTしたい文字列がAS内でStringオブジェクトとして存在している場合(変数名をmessageとする)、
Stringは、utf-8なので、euc-jpのByteArrayに変換する。



もしくは、Jcodeというライブラリを使って、


次に、ByteArrayだと配列みたいに操作できないので、Arrayに変換する。



readByteで1バイトずつ取り出しているんだけど、なぜか上位3バイトがFFFFFFで埋められていたので、000000FFでANDをとるなどした。



最後は簡単、
Arrayの値を16進数の文字にして、頭に%をつけるだけの簡単なお仕事


メモ終わり。
ActionScript内のStringは全部utf-8で管理されていて、ネットワークからデータを取得した時に

それがeuc-jpだと、文字化けてしまう。


サーバーサイドが自分で変更できるなら、他の文字コードに変換してから送ればいいけど、

自分ではどうしようもなければ、クライアント側で変換しなければならない


それをLibraryとか使わずに、sdkの機能だけで頑張ってみた。


ポイントは、2つ

・受け取ったデータをバイナリで取得する。



・CompleteイベントでそれをStringに変換



これでいけるはず。


もしダメだったら、


とかも試してください

iKnow

あわせて読みたいブログパーツ
Firefox meter