我在Flex中使用ExternalInterface从Javascript中检索AMF编码的字符串。问题是AMF编码的字符串有时包含\ u0000,导致ExternalInterface返回null而不是Javascript中的编码字符串。
知道如何解决这个问题吗?
提前致谢。
答案 0 :(得分:4)
读取外部数据时,\ 0000被错误地解释为EOF。当它出现在XML文件中时也会发生同样的事情。
在将字符串传递给Flash之前,您应该能够使用明确的字符序列替换它,并在ActionScript中接收时返回。在JavaScript函数中,使用类似
的内容return returnString.replace (/\0000/g, "{nil}");
这应该从字符串中删除不需要的\ 0000字符,然后再将其返回给Flash。
在Flash端,使用
receiveString = receiveString.replace (/\{nil\}/g, "\u0000");
收到数据后直接。
答案 1 :(得分:2)
将pyamf AMF输出编码到base64就可以了。
这是python中的编码部分:
encoder = pyamf.get_encoder(pyamf.AMF3)
encoder.writeObject(myObject)
encoded = base64.b64encode(encoder.stream.getvalue())
这是AS3中的解码部分:
var myDecoder:Base64Decoder = new Base64Decoder();
myDecoder.decode(base64EncodedString);
var byteArr:ByteArray = myDecoder.toByteArray()
byteArr.position = 0;
var input:Amf3Input = new Amf3Input();
input.load(byteArr);
var test:MyObject = input.readObject();