9

这是我关于 Stack Overflow 的第一个问题。这不是我第一次想写一个,但通常我会使用搜索栏找到解决方案,这次我没有。我要解决的问题有点复杂,所以我会尽量做到彻底。

基本上,我们正在将中国支付添加到现有的 Flash 电子商务中。整个网站在 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

我终于找到了解决办法!!!!

基本上我必须在 Flash 中渲染汉字,这样当我将它们传递给 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 回答