- PR -

Flash MX 用のエンコーディング形式は?

1
投稿者投稿内容
遊説家
会議室デビュー日: 2003/10/22
投稿数: 15
お住まい・勤務地: 奈良県
投稿日時: 2003-10-22 18:15
Flash MX をクライアントとしてサーブレットにリクエストを出し、
返答されるHTMLデータを解析する形式でWEBアプリケーションの
テストを行っています
--- 以下 Flash でのあるボタンのスクリプト
on(release) {
System.useCodepage = true;
MySendVars = new LoadVars();
MySendVars._class = "SampleClass";
MySendVars._mNm = "getAllData";
MyLoadVars = new LoadVars();
mySendVars.sendAndLoad(
   "http://(サーバ名称)ポート)/(起動するサーブレットクラス名)", MyLoadVars,"POST");
MyLoadVars.onLoad = function( success ) {
trace( MyLoadVars.toString() ); --- @
}
}
でめでたくサーブレットはキックできて、返答は帰ってきたのですが、
スペース等が %20 < が %3C などとエンコード形式の問題?でHTML タグとして
認識できない状態です。
というか、@のtrace文での出力がそうなっているのですが...
現在、サーブレット側のエンコーディングは

res.setContentType( "text/html; charset=Shift_JIS");

としているのですが、これではまずいのでしょうか?
ちなみに、sendAndLoad をせずに
MySendVars.send( URL, "_self","POST");
で結果をブラウザウィンドウで表示させるとHTML形式は正常にHTMLとして
(変な表現ですね)表示されます

どなたかお知恵を拝借できないでしょうか?
eiji
常連さん
会議室デビュー日: 2003/07/23
投稿数: 32
投稿日時: 2003-10-22 18:33
URLDecoder でデコードしてあげれば、よいのではないでしょうか?
※でも、そのクライアントでは、URLDecoderって使えそうに無いですね
#ブラウザで正しく表示できるのは、内部でデコードを行っているからです。

エンコードしないようにするには、
Servletの実装で、エンコードしないように実装する必要があります。
仰っている通り、HTTPのヘッダー値を見直せば、よいような気がします。




[ メッセージ編集済み 編集者: eiji 編集日時 2003-10-22 18:43 ]
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2003-10-22 20:00
引用:

遊説家さんの書き込み (2003-10-22 18:15) より:

res.setContentType( "text/html; charset=Shift_JIS");

としているのですが、これではまずいのでしょうか?


えっと、headerはこれでよろしいと思います。
Action Scriptで、System.useCodepage = true;としている限りですが。
この問題は、はFlash Plugin のバージョンによって扱いが異なっているようで
比較的新しい6.0.79.0以降ではきちんと認識されると思います。
遊説家
会議室デビュー日: 2003/10/22
投稿数: 15
お住まい・勤務地: 奈良県
投稿日時: 2003-10-22 20:03
eiji 様
 ご返答ありがとうございます
私には、サーブレットをエンコーディングなしにする実装するのは敷居が
だいぶ高かったので素直にActionScript での(un)Encoding 方法を調べたら
、ありました!「unescape関数」を使うんだそうです。(きっとActionScript
に詳しい人には当然の話なんでしょうね)
以下修正後のソースです
(といっても、trace( Unescape( MyLoadVars.toString() ) );しか
変わっていませんが)

on(release) {
System.useCodepage = true;
MySendVars = new LoadVars();
MySendVars._class = "SampleClass";
MySendVars._mNm = "getAllData";
MyLoadVars = new LoadVars();
mySendVars.sendAndLoad(
"http://a0957:8010/Fact/servlet/HttpMethodRunner", MyLoadVars,"POST");
MyLoadVars.onLoad = function( success ) {
trace( Unescape( MyLoadVars.toString() ) );
}
}

【返答】
<table border = 1><tr><td>1</td><td>real-Dream</td></tr></table>

&onLoad=[type Function]

少し余計な文字も返答に入っているようですが、これはなんとかなりそうです

重ねて御礼を申し上げます
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2003-10-22 20:18
おー、unescape関数ってマルチバイト文字を含んでいても
きちんと動作しますね。勉強になりました。
1

スキルアップ/キャリアアップ(JOB@IT)