Flex에서 ExternalInterface를 사용하여 Javascript에서 AMF로 인코딩 된 문자열을 가져옵니다. 문제는 AMF로 인코딩 된 문자열에 때때로 \ u0000이 포함되어 있기 때문에 ExternalInterface가 Javascript에서 인코딩 된 문자열 대신 null을 반환하도록합니다.Javascript에서 Flex로 데이터를 전달할 때 문제가 발생했습니다.
어떻게 해결할 수 있을까요?
미리 감사드립니다.
Flex에서 ExternalInterface를 사용하여 Javascript에서 AMF로 인코딩 된 문자열을 가져옵니다. 문제는 AMF로 인코딩 된 문자열에 때때로 \ u0000이 포함되어 있기 때문에 ExternalInterface가 Javascript에서 인코딩 된 문자열 대신 null을 반환하도록합니다.Javascript에서 Flex로 데이터를 전달할 때 문제가 발생했습니다.
어떻게 해결할 수 있을까요?
미리 감사드립니다.
pyamf AMF 출력을 base64로 인코딩하면 트릭을 수행하게됩니다. 여기
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();
\ 0000은 외부 데이터를 읽을 때 EOF로 잘못 해석됩니다. XML 파일에도 같은 일이 발생합니다.
문자열을 Flash로 전달하기 전에 명확한 문자 시퀀스로 바꿀 수 있어야하고 ActionScript로 수신 할 때 되돌릴 수 있어야합니다. JavaScript 함수에서 다음과 같이 사용하십시오.
return returnString.replace (/\0000/g, "{nil}");
이렇게하면 Flash에 반환하기 전에 원치 않는 \ 0000자를 문자열에서 제거해야합니다. 플래시 측면
직접 데이터를 수신 한 후receiveString = receiveString.replace (/\{nil\}/g, "\u0000");
를 사용한다.
+1 독창성. 이상한 문자가 AMF 패킷의 중요한 부분이 아니라고 가정하면 작동합니다. – JeffryHouser
예, \ u0000은 AMF 메시지의 일부입니다. 나는 플렉스에서 운율없이 \ u0000으로 다른 캐릭터로 교체하려고 시도했다. Google App Engine을 사용하여 AMF 메시지를 Javascript로 푸시 한 다음 Flex로 푸시합니다. 메시지는 GAE 사이트의 pyamf를 사용하여 AMF3으로 인코딩되며 Javascript에서는 올바르게 보이지만 ExternalInterface를 통해 Flex로 전달할 때 실패합니다. PyAMF 인코딩은 DateTimeProperty 또는 IntegerProperty를 전달할 때 \ u0000을 사용합니다. StringProperty는 \ u0000으로 인코딩되지 않으므로 한 가지 해결책은 모든 클래스 속성을 string으로 변경하는 것이지만 그렇게하지 않으려 고합니다. – doorman
이 새로운 정보에 따라 답변을 편집했습니다. – weltraumpirat
당신이 플래시 리모팅을 통해 또는 AMFPHP 같은 것을 통해 AMF를 사용하고 있습니까? 필자는 AMF만을 서비스로 사용했습니다 (ExternalInterface를 사용하지 않아도 됨). - http://amfphp.sourceforge.net/ – Jacksonkr
JavaScript 용 AMF 라이브러리는 무엇입니까? 문제를 재현하기 위해 몇 가지 코드를 공유하십니까? – JeffryHouser