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進数の文字にして、頭に%をつけるだけの簡単なお仕事
メモ終わり。
前回の、[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進数の文字にして、頭に%をつけるだけの簡単なお仕事
メモ終わり。
コメントする