abe*_*nni 9 javascript encoding actionscript-3 cjk externalinterface
这是我关于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");
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
function chinesePayment(param) {
var newWindow = window.open();
//var unescaped = unescape(param);
newWindow.document.write(param);
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用unescape,escape,URIencoding,但没有任何成功,所以我真的希望你能帮助我在这里!
谢谢,多梅尼科
编辑:
我只想提一下,我从他们的服务器上收到了正确的HTML页面.我尝试在本地保存页面,直接从服务器响应中复制HTML代码,并正确地查看页面.这意味着在将页面从AS3传递到Javascript的过程中必定存在问题.
EDIT2!重要:
我意识到问题在于弹出编码.当我从弹出窗口复制HTML时,将其粘贴到编辑器中并保存,我可以正确查看HTML.好像弹出窗口不考虑gbk编码.我现在正在寻找解决这个问题的方法.
我终于找到解决办法了!!!!
基本上我必须在 Flash 中渲染汉字,这样当我将它们传递给 JavaScript 时,它们就已经被编码了。因此,首先我必须将 URLLoaderDataFormat 的类型更改为 BINARY,以便收到一个 byteArray:
my_loader.dataFormat = URLLoaderDataFormat.BINARY;
Run Code Online (Sandbox Code Playgroud)
收到回复后,我这样修改代码:
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");
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,由于特定的 byteArray 函数,我可以使用首选字符集读取响应,现在它可以工作了!
javascript 保持不变,没有 unescape 或类似内容。通过这种方式,javascript 函数接收到一个包含中文字符的字符串,而不是包含等效的 utf 字符。
感谢大家帮助我找到了解决方案!
| 归档时间: |
|
| 查看次数: |
528 次 |
| 最近记录: |