这是我关于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!important:
我意识到问题出在弹出编码中。当我从弹出窗口复制HTML时,将其粘贴到编辑器中并保存,我可以正确查看HTML。好像弹出窗口不考虑gbk编码。我现在正在寻找解决这个问题的方法。
答案 0 :(得分: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或similars。通过这种方式,javascript函数接收到一个包含中文字符的字符串,而不是等效的utf字符。
感谢大家,您帮我解决了问题!