ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

【高度】Flash Action ScriptコミュのサーブレットへGET転送での文字化けについて

  • mixiチェック
  • このエントリーをはてなブックマークに追加
ActionScript歴2ヶ月です。
教えてくださいというのも申し訳ないですが、

質問させていただきます。

環境 OS:WINDOWS2000
JDK:なんと1.2
DB:ORACLE
FLASH 8

で住所検索機能を作っております。

FLASHからLoadVarsを使用してGET転送、
JavaServletで受け取るという処理を作っています。

画面イメージとして
銀行のインターネットバンキングの支店名検索のような雰囲気です。
頭文字がリンクになっていてそれをクリックして
それに引っかかった県、市、区などをDBから検索して

FLASH側に返し
画面に検索結果をダイナミックテキストに代入、表示し、
それをリンクボタンとして使い
どんどん住所を検索して絞り込んでいくという機能です。

ダイレクトに郵便番号を取得する”半角”数字だけの
検索は成功しました。
戻り値はちゃんと漢字で返ってきます。

戻り値の例
大阪府大阪市・・・・・


それ以外の検索方法で

DBのカラム上、半角カナが入っておりこれを引っ張って
紐付く検索結果を取得したいのですが、

ACTIONSCRIPTでGET転送すると半角カナはそのままでは
Java側のログで"?"に文字化けしてしまいます。

実際に使用している画面から半角カナをリンクボタンにした
文字を渡すクラス(自作)の関数です。

引数
kenNo:String, 半角数字
kenKana:String, 半角カナ
cityKana:String 半角カナ

/**
* 50音検索よりキーを受け取り、DB検索を行う。
*/
function loading50(kenNo:String, kenKana:String, cityKana:String){
    // SJISに設定
    System.useCodepage = true;
    // servlet 帰り値受け取り用 LoadVars
    var recv_lv:LoadVars = new LoadVars();
    //パラメータをGET送信し、DB検索する。
    var lv:LoadVars = new LoadVars();
    recv_lv.onLoad = function(success) {
        if (success) {
            trace("this.resAnswer"+this.resAnswer);
                // recv_lv.address を表示
                return this.resAnswer;
            }
        };
    lv.sendAndLoad("http://URL・・・・?kenNo="+kenNo+"&kenKana="+kenKana+"&cityKana="+cityKana+",recv_lv, "GET");
}

この関数のsendAndLoadの手前でGET転送する変数をtraceしたところちゃんと半角カナで表示されました。

これをサーブレットで doGet()で受け取って
req.getParameterで取得
ログに表示すると "?"になってしまいます。

ActionScriptで転送する際に化けないように
エンコードしてやるのかとか

サーブレットでフィルターのようなものでエンコードしてやるのか何らかの方法があるきがするのですが
ネットや書籍で調べてもわかりません。

System.useCodepage = true;
を使用しても全角カナなどでも
サーブレットに転送したら意味がなかったようです。

情報が足りなければまた書き込みます。
文章がなかなかうまくかけないです・・申し訳ないです。

もし経験ありの方がいらっしゃればよろしくお願いいたします。m(_ _)m

勝手にトピック立ててしまいました。

コメント(8)

flash側でurlエンコードした?
escapeで調べてみて。
>flash側でurlエンコード
それが出来てなくてどうやったらよいかわかんなくて。

了解です。

ありがとうございます。その調べるキーワードもなかなか出てこなかったです。
簡単に読んだだけでレスです。的外れならごめんなさい。

URLエンコードの可能性ともうひとつ

ORACLEの場合は分かりませんが、MYSQLの場合文字コードの設定がデフォルトでLatinの場合が多く、2バイトコードを「Latin->UTF-8」等内部で自動で変換してしまい、全ての2バイトコードが?????になる現象があります。
これは、DBで文字コードの統一が取れてない場合に発生します。
>たかちゃんさま

ありがとうございます。

なるほど〜たしか
MySQLはEUCに設定するんですよね?

ORACLEから 〜 とか取得すると?になっちゃうから、
むりやり文字コードをMS932に変更しちゃうって事はやりました。

今回の場合、こういうことをサーブレットに送る前にescapeしてやらないとダメなんですよねー
私はMySQLをUTF-8に統一していました。

あとこれはJavaServlet-ORACLEはきちんと読み込みできてるんですよね?
できてるのなら先ほどのDBの文字コードの統一設定ではなく、エンコードがしっかりできてないっぽいですね。
はずしてるかもしれませんが、

JAVAは内部コードをunicodeで扱うので、SJISを送ると「?」になるはずですよ。

サーブレット側で文字コード変換処理をいれるか、
FLASH側でUnicodeに変換して送る必要がありますね。
こんにちは。

皆様ありがとうございます。

>たかちゃんさま
JavaServlet-ORACLEはきちんと読み込みできてるんですよね

すでに動いているJavaアプリを画面はFLASHでリッチクライアント化しようとしたのが始まりです。

だれも回りにActionscriptを触る人がいないので
すべて独学でこんな感じで作業を進めているという状況です。

時間もないままどんどんスケジュールがすすむので
なかなかきっちりした理解ということが出来ていませんでした^^;


>恭平@引き抜き募集中 さま

>JAVAは内部コードをunicodeで扱うので、SJISを送ると「?」になるはず

そうですね。
それをGETで "&"でつないでいたのだからそりゃ化けるはずです。で、FLASHだった場合にどうエンコードするかが
わからなかったんです。
POSTでやろうかとも思いましたが、パラメータは数が限られているので。

そこに中途半端な理解のLoadVarsをなめてたかもしれないです。以前ファイル名が一意になっていない複数件あるCSVファイルの読み、、複数枚になる発注書ってをを四苦八苦しながら
作ってましてそれの雰囲気で普通に使ったいたのですが・・

KURAGE@ISEさまの
ソースにすべてが書いてました。

lv.kenNo = "001";
lv.kenKana = "ア";
lv.cityKana= "カ";

こんなこと出来たんですね・・・
全角半角すべてパラメータ飛ばせました・・・

機種依存文字のようなものは飛ばす予定がないので今は
これだけで十分です!

ホントに恥ずかしい限り・・申し訳ない・・

皆様本当にありがとうございましたm(_ _)m

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

【高度】Flash Action Script 更新情報

【高度】Flash Action Scriptのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング