9

これはスタック オーバーフローに関する私の最初の質問です。書きたいと思ったのは初めてではありませんが、通常は検索バーを使用して解決策を見つけますが、今回は見つけませんでした。私が取り組んでいる問題は少し複雑なので、できる限り徹底的に取り組みます。

基本的に、既存の Flash の e コマースに中国の支払いを追加します。Web サイト全体が AS3 にあり、SWFObject を使用して埋め込まれ、すでに他の目的で ExternalInterface を使用しています。

この新しい中国の支払い方法は少し時代遅れであるため、支払いの処理方法が奇妙です。すべての注文の詳細を含む POST をサーバーに送信すると、HTML ページで応答します。私の問題は、Flash 内で受信したことを考慮して、このページをレンダリングすることです。

私が現在試している解決策は部分的に機能します。つまり、ページを見ることはできますが、ページにあるはずの漢字がうまく表示されません。漢字の代わりに奇妙な文字が表示されるので、HTML を Flash から Javascript に渡すときにエンコーディングの問題があるに違いないと推測しています。これが私がやっている方法です:

AS3:

//extract html page from response
var newHTML:String = e.currentTarget.data;
//trim whitespace to avoid javascript error
newHTML = newHTML.replace(/\n/g, '');
newHTML = newHTML.split("\r").join("");

if(ExternalInterface.available)
  ExternalInterface.call("chinesePayment('"+newHTML+"')");
else
  trace("External interface error");

Javascript:

function chinesePayment(param) {
  var newWindow = window.open();
  //var unescaped = unescape(param);
  newWindow.document.write(param);
}

unescape、escape、URIencoding をいじってみましたが、うまくいきませんでした。

ありがとう、ドメニコ

編集:

サーバーから正しい HTML ページを受信して​​いることをお伝えしたいと思います。ページをローカルに保存し、サーバーの応答から HTML コードを直接コピーして、ページを正しく表示しようとしました。つまり、ページを AS3 から Javascript に渡すプロセスに問題があるはずです。

EDIT2 重要:

問題はポップアップのエンコーディングにあることに気付きました。ポップアップから HTML をコピーし、エディターに貼り付けて保存すると、HTML を正しく表示できます。ポップアップは gbk エンコーディングを考慮していないようです。私は今、この問題の解決策を探しています。

4

1 に答える 1

2

私はついに解決策を見つけました!!!!

基本的に、中国語の文字をフラッシュでレンダリングする必要があったため、中国語の文字を javascript に渡したときに既にエンコードされていました。そのため、まず URLLoaderDataFormat のタイプを BINARY に変更して、byteArray を受け取る必要がありました。

my_loader.dataFormat = URLLoaderDataFormat.BINARY;

応答を受け取ったら、次のようにコードを変更しました。

        var bytes:ByteArray = e.currentTarget.data;
        var newHTML:String = bytes.readMultiByte(bytes.length,"gb2312");
        //trim whitespace to avoid javascript error
        newHTML = newHTML.replace(/\n/g, '');
        newHTML = newHTML.split("\r").join("");

        if(ExternalInterface.available)
            ExternalInterface.call("chinesePayment('"+newHTML+"')");
        else
            trace("External interface error");

ご覧のとおり、特定の byteArray 関数のおかげで、優先文字セットを使用して応答を読み取ることができ、今では機能しています!

javascript は同じままで、unescape や類似のものはありませんでした。このようにして、javascript 関数は、同等の utf 文字ではなく、漢字を含む文字列を受け取りました。

みんなのおかげで、解決にたどり着くことができました!

于 2012-11-29T18:42:34.253 に答える